AVG non sta prendendo in considerazione i valori nullo
-
12-12-2019 - |
Domanda
Ho caricato i seguenti dati di prova:
name, age,gender
"John", 33,m
"Sam", 33,m
"Julie",33,f
"Jimbo",, m
.
Con schema: name:STRING,age:INTEGER,gender:STRING
e ho confermato che la riga Jimbo mostra un NULL per la colonna "Age" nello strumento BIGQuery Browser> MyDataset> Dettagli> Sezione Anteprima.
Quando eseguo questa query:
SELECT AVG(age) FROM [peterprivatedata.testpeople]
.
ottengo 24.75 che non è corretto.Mi aspettavo 33 perché Documentazione per AVG dice "righe con un valore nullonon sono inclusi nel calcolo. "
Sto facendo qualcosa di sbagliato o è questo un bug noto?(Non so se c'è una lista di problemi pubblici da controllare).Qual è il più semplice workaround a questo?
Soluzione
Questo è un bug noto dove costringiamo valori numerici nulli a 0 su import.Attualmente stiamo lavorando su una correzione.Questi valori fanno , tuttavia, vengono visualizzati come non definiti (che per vari motivi è diverso da NULL), in modo da poter controllare IS_EXPLICITLY_DeFined.Ad esempio:
.
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
In alternativa, è possibile utilizzare un'altra colonna per rappresentare IS_NULL.Quindi la query sarebbe piaciuta:
. SELECT sum(if(numeric_field_is_null, 0, numeric_field)) /
sum(if(numeric_field_is_null, 0, 1))
AS my_avg FROM your_table