AVG não está levando em consideração valores nulos
-
12-12-2019 - |
Pergunta
Carreguei os seguintes dados de teste:
name, age,gender
"John", 33,m
"Sam", 33,m
"Julie",33,f
"Jimbo",, m
com esquema: name:STRING,age:INTEGER,gender:STRING
e confirmei que a linha Jimbo mostra um nulo para a coluna "idade" na seção BigQuery Browser Tool > mydataset > Detalhes > Visualização.
Quando executo esta consulta:
SELECT AVG(age) FROM [peterprivatedata.testpeople]
Recebo 24,75, o que está incorreto.Eu esperava 33 porque o documentação para AVG diz "Linhas com valor NULL não são incluídas no cálculo."
Estou fazendo algo errado ou isso é um bug conhecido?(Não sei se existe uma lista de problemas públicos para verificar).Qual é a solução mais simples para isso?
Solução
Este é um bug conhecido em que forçamos valores numéricos nulos a 0 na importação.No momento, estamos trabalhando em uma correção.Esses valores fazer no entanto, aparece como não definido (que por vários motivos é diferente de nulo), para que você possa verificar IS_EXPLICITLY_DEFINED.Por exemplo:
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
Alternativamente, você poderia usar outra coluna para representar is_null.Então a consulta ficaria assim:
SELECT sum(if(numeric_field_is_null, 0, numeric_field)) /
sum(if(numeric_field_is_null, 0, 1))
AS my_avg FROM your_table