在 SQL 中,当我的查询包含诸如 之类的聚合函数时,我通常使用
和 COALESCE
和 IFNULL
来确保我得到数字而不是 NULL
>COUNTSUM
,例如:
SELECT IFNULL(COUNT(foo), 0) AS foo_count FROM …
但是,在 BigQuery 中我遇到了错误:
Argument type mismatch in function IFNULL: 'f0_' is type uint64, '0' is type int32.
有没有办法让 BigQuery 理解在此上下文中文字 0 应解释为 unit64
?
我尝试过使用 CAST
,但没有可以转换为的 unit64
类型,因此我尝试 INTEGER
:
SELECT IFNULL(COUNT(foo), CAST(0 AS INTEGER)) AS foo_count FROM …
这给了我基本上相同的错误,但至少我成功地得到了 64 位零而不是 32 位:
Argument type mismatch in function IFNULL: 'f0_' is type uint64, '0' is type int64.
如果我使用INTEGER(0)
,也会发生同样的情况。
如果我将两个参数都转换为INTEGER
,我就可以让它工作:
SELECT IFNULL(INTEGER(COUNT(foo)), INTEGER(0)) AS foo_count FROM …
但现在它开始变得冗长。这真的是您应该在 BigQuery 中执行的操作吗?
最佳答案
这是 BigQuery 中的一个错误,该错误已经存在相当长一段时间了。目前,您需要强制转换 COUNT
,但不需要对“0”执行此操作。
以下应该有效:
SELECT IFNULL(INTEGER(COUNT(foo)), 0) AS foo_count FROM
感谢 @Kinaan Khan Sherwani 提供 official bug report 的链接.
关于sql - BigQuery COALESCE/IFNULL 类型与文字不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35349261/