AVG ne prend pas en compte les valeurs nulles
-
12-12-2019 - |
Question
J'ai chargé les données de test suivantes :
name, age,gender
"John", 33,m
"Sam", 33,m
"Julie",33,f
"Jimbo",, m
avec schéma : name:STRING,age:INTEGER,gender:STRING
et j'ai confirmé que la ligne Jimbo affiche une valeur nulle pour la colonne « âge » dans la section Outil du navigateur BigQuery > mydataset > Détails > Aperçu.
Quand j'exécute cette requête :
SELECT AVG(age) FROM [peterprivatedata.testpeople]
J'obtiens 24,75, ce qui est incorrect.J'en attendais 33 car le documentation pour AVG dit "Les lignes avec une valeur NULL ne sont pas incluses dans le calcul."
Est-ce que je fais quelque chose de mal ou est-ce un bug connu ?(Je ne sais pas s'il existe une liste de problèmes publics à vérifier).Quelle est la solution la plus simple à ce problème ?
La solution
Il s'agit d'un bug connu dans lequel nous forçons les valeurs numériques nulles à 0 lors de l'importation.Nous travaillons actuellement sur un correctif.Ces valeurs faire cependant, affichez-vous comme non défini (ce qui, pour diverses raisons, est différent de null), afin que vous puissiez vérifier IS_EXPLICITLY_DEFINED.Par exemple:
SELECT sum(if(is_explicitly_defined(numeric_field), numeric_field, 0)) /
sum(if(is_explicitly_defined(numeric_field), 1, 0))
AS my_avg FROM your_table
Alternativement, vous pouvez utiliser une autre colonne pour représenter is_null.La requête ressemblerait alors à :
SELECT sum(if(numeric_field_is_null, 0, numeric_field)) /
sum(if(numeric_field_is_null, 0, 1))
AS my_avg FROM your_table