AVG没有考虑空值

时间:2012-10-02 03:21:11

标签: google-bigquery

我已加载以下测试数据:

name,   age,gender
"John", 33,m
"Sam",  33,m
"Julie",33,f
"Jimbo",, m

with schema:name:STRING,age:INTEGER,gender:STRING我已经确认Jimbo行在BigQuery浏览器工具>中显示列“age”的空值mydataset>详细信息>预览部分。

当我运行此查询时:

SELECT AVG(age) FROM [peterprivatedata.testpeople]

我得到24.75这是不正确的。我期望33,因为documentation for AVG说“具有NULL值的行不包括在计算中。”

我做错了什么或者这是一个已知的错误? (我不知道是否有公共问题清单要检查)。对此最简单的解决方法是什么?

1 个答案:

答案 0 :(得分:1)

这是一个已知的错误,我们在导入时将空数值强制为0。我们目前正在修复。然而,这些值 do 显示为未定义(由于各种原因与null不同),因此您可以检查IS_EXPLICITLY_DEFINED。例如:

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

或者,您可以使用另一列来表示is_null。然后查询看起来像:

    SELECT sum(if(numeric_field_is_null, 0, numeric_field)) / 
       sum(if(numeric_field_is_null, 0, 1)) 
    AS my_avg FROM your_table