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?

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top