sql - BigQuery COALESCE/IFNULL 类型与文字不匹配

标签 sql google-bigquery

在 SQL 中,当我的查询包含诸如 之类的聚合函数时,我通常使用 COALESCEIFNULL 来确保我得到数字而不是 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/

相关文章:

sql - 按列值相同的行数排序

mysql - SQL语句优化问题

sql - 玩了至少三场比赛后 3 天内回来的用户数量?

google-bigquery - BigQuery 今天不太快 - 只有 1 行的表需要一分钟的时间来查询

sql - 计算 BigQuery 重复字段中的值

mysql - 在 MySQL 中,有没有办法在执行 SELECT * 时选择一列而不是另一列?

c# - 使用sql参数转义SQL LIKE语句中的特殊字符

mysql - 1452 - 无法添加或更新子行 : a foreign key constraint fails

r - 使用来自 R Markdown 文档的 bigrquery 对 Bigquery 进行身份验证

sql - 如何在 Google BigQuery 中透视数据集?