【发布时间】:2016-02-11 20:20:10
【问题描述】:
在 SQL 中,当我的查询包含像 COUNT 和 SUM 这样的聚合函数时,我通常使用 COALESCE 和 IFNULL 来确保获得数字而不是 NULL,例如:
SELECT IFNULL(COUNT(foo), 0) AS foo_count FROM …
但是,在 BigQuery 中我遇到了一个错误:
函数 IFNULL 中的参数类型不匹配:“f0_”是 uint64 类型,“0”是 int32 类型。
有没有办法让 BigQuery 理解在这种情况下文字 0 应该被解释为 unit64?
我尝试过使用CAST,但没有unit64 类型可以转换,所以我尝试INTEGER:
SELECT IFNULL(COUNT(foo), CAST(0 AS INTEGER)) AS foo_count FROM …
这给了我基本相同的错误,但至少我成功地得到了 64 位零而不是 32 位:
函数 IFNULL 中的参数类型不匹配:“f0_”是 uint64 类型,“0”是 int64 类型。
如果我使用INTEGER(0),也会发生同样的情况。
如果我将两个参数都转换为INTEGER,我可以让它工作:
SELECT IFNULL(INTEGER(COUNT(foo)), INTEGER(0)) AS foo_count FROM …
但现在它开始变得冗长了。这真的是您在 BigQuery 中应该这样做的方式吗?
【问题讨论】:
-
您应该只需要在您的
COUNT周围加上INTEGER,对吗?仍然不理想,因为隐式转换对引擎来说应该很容易,但事实如此......顺便说一句,这也可能会带来一些启示:stackoverflow.com/questions/11059778/… -
是的,不知道为什么我没有考虑到这一点,但仍然没有必要。感谢您的链接 - 似乎该错误已经有一段时间没有修复了 :)
-
@KinaanKhanSherwani 谢谢,我必须留意那些报告中提到的修复。
-
在什么情况下
COUNT会返回 NULL 而不是 0?
标签: sql google-bigquery