我加载了以下测试数据:

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
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top