在子查询中使用count(*)的结果时,BigQuery可能会返回错误。这是一个例子:
SELECT
SUM(IF(year%2=0, children, 0))
FROM (
SELECT year, COUNT(1) AS children
FROM [publicdata:samples.natality]
GROUP BY year
)
它将返回:
错误:函数IF中的参数类型不匹配:'children'是类型 uint64,'0'是int32。
BigQuery count(1)和0内部的某个地方有不同的类型,它会返回一个错误。
答案 0 :(得分:1)
上面的示例超出了实际情况,很抱歉,如果下面对你没有意义 - 但你要求选择:o)
在这种特殊情况下,您可以使用NULL。当然,如果默认值不是0
,它将无法工作SELECT
SUM(IF(YEAR%2=0, children, NULL))
FROM (
SELECT YEAR, COUNT(1) AS children
FROM [publicdata:samples.natality]
GROUP BY YEAR
)
另一个重写查询的选项如下:
SELECT count(1) AS children
FROM [publicdata:samples.natality]
WHERE year%2=0
答案 1 :(得分:0)
改为使用sum(1)!
始终以硬核方式修复:
SELECT
SUM(IF(year%2=0, INTEGER(children), 0))
FROM (
SELECT year, COUNT(*) AS children
FROM [publicdata:samples.natality]
GROUP BY year
)
刚才意识到最好的方法是:
SELECT
SUM(IF(year%2=0, children, 0))
FROM (
SELECT year, sum(1) AS children
FROM [publicdata:samples.natality]
GROUP BY year
)
任何担忧/更好的选择?
答案 2 :(得分:0)
这是BigQuery类型强制中的错误。虽然可以使用几种解决方法 - 我们已经修复了BigQuery中的基础问题,并且该修补程序将在下一个BigQuery版本中提供(我将在推出时更新此答案)。