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 ?

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top