我已加载以下测试数据:
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值的行不包括在计算中。”
我做错了什么或者这是一个已知的错误? (我不知道是否有公共问题清单要检查)。对此最简单的解决方法是什么?
答案 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