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?

È stato utile?

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
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top