2

我已经加载了以下测试数据:

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

使用架构:name:STRING,age:INTEGER,gender:STRING并且我已确认 Jimbo 行在 BigQuery 浏览器工具 > mydataset > 详细信息 > 预览部分中的“年龄”列显示为空。

当我运行此查询时:

SELECT AVG(age) FROM [peterprivatedata.testpeople]

我得到 24.75 这是不正确的。我预计是 33,因为AVG 的文档说“计算中不包括具有 NULL 值的行”。

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

4

1 回答 1

2

这是一个已知的错误,我们在导入时将 null 数值强制为 0。我们目前正在努力修复。然而,这些值确实显示为未定义(由于各种原因与 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
于 2012-10-02T17:08:50.140 回答