BigQuery count(*)抛出类型不匹配错误

时间:2015-11-27 05:03:01

标签: google-bigquery

在子查询中使用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内部的某个地方有不同的类型,它会返回一个错误。

3 个答案:

答案 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版本中提供(我将在推出时更新此答案)。