11
votes

Obtenez pourcentage de colonnes complétées en calculant les valeurs null

J'ai une table avec une colonne qui permet aux nulls. Si la valeur est null, elle est incomplète. Je veux calculer le pourcentage complet.

Peut-il être fait dans MySQL via SQL ou dois-je obtenir les entrées totales et les entrées NULL totales et calculer le pourcentage sur le serveur? P>

de toute façon, je suis très confus sur la façon dont j'ai besoin Pour aller séparer la variable_value afin que je puisse obtenir ses résultats totaux et ses résultats nuls totaux. P>

SELECT
    games.id
FROM 
    games
WHERE 
    games.category_id='10' AND games.variable_value IS NULL


1 commentaires

Pouvez-vous nous donner le schéma de la table?


3 Réponses :


24
votes

Lorsque vous utilisez "Compte" avec un nom de colonne, les valeurs NULL ne sont pas incluses. Donc, pour obtenir le comte ou le cent non NULL, faites-le simplement ...

SELECT
   count(1) as TotalAll,
   count(variable_value) as TotalNotNull,
   count(1) - count(variable_value) as TotalNull,
   100.0 * count(variable_value) / count(1) as PercentNotNull
FROM
   games
WHERE
   category_id = '10'


1 commentaires

+1: C'était mon idée trop - colonne calculée, divisant le montant par le nombre d'instances non nulles. Je pensais somme (coalesce (valeur, 0) / compte (...) moi-même ...



7
votes
SELECT
    SUM(CASE WHEN G.variable_value IS NOT NULL THEN 1 ELSE 0 END)/COUNT(*) AS pct_complete
FROM
    Games G
WHERE
    G.category_id = '10'
You might need to do some casting on the SUM() so that you get a decimal.

1 commentaires

Ouais, je lui ai donné un +1 aussi. J'aime que les agrégats sur NULL peuvent conduire à un code plus concis, bien que par défaut quand je commence à taper je vais pour Verbose :)



2
votes

Pour compter le nombre d'entrées correspondant à votre instruction WHERE, utilisez Comptez (*)

c   |  isnull
==============
12  |  1
193 |  0


0 commentaires