在SQL中,我通常使用COALESCE
和IFNULL
来确保当我的查询包含COUNT
和SUM
等聚合函数时,我得到数字而不是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 中做到的吗?
这是 BigQuery 中的一个错误,已经存在了很长时间。目前你需要强制转换COUNT
,但你不应该需要为你的"0"这样做。
以下方法应该有效:
SELECT IFNULL(INTEGER(COUNT(foo)), 0) AS foo_count FROM
感谢@Kinaan汗谢尔瓦尼提供官方错误报告的链接。