题
我加载了以下测试数据:
name, age,gender
"John", 33,m
"Sam", 33,m
"Julie",33,f
"Jimbo",, m
.
使用架构:name:STRING,age:INTEGER,gender:STRING
,我已确认jimbo行在byquery浏览器工具> mydataset>详细信息>预览部分中显示了列为“age”列“age”。
当我运行此查询时:
SELECT AVG(age) FROM [peterprivatedata.testpeople]
.
我得到24.75,这是不正确的。我期待33因为 avg 的文档为nullable nullable nultaplyaply值不包括在计算中。“
我做错了什么,或者是一个已知的错误吗?(我不知道是否有一个公共问题列表来检查)。这是最简单的解决方法?
解决方案
这是一个已知的错误,在导入时,我们将null数字值强制为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
不隶属于 StackOverflow