错误:对于参数类型BOOL,函数IF没有匹配的签名。支持的签名:IF(BOOL,ANY,ANY)

时间:2019-05-09 14:33:46

标签: sql google-bigquery standard-sql

我试图计算“评级”高于9的次数。使用StandardSQL在Google BigQuery中工作

我以前使用的是CASE WHEN函数,但由于只有一种情况,因此想将其更改为IF。以前的代码效果很好:

SELECT 
COUNT(CASE WHEN (survey_responses.survey_rating  >= 9) THEN 1 ELSE NULL END) 
   AS survey_responses_num_positives

当前代码

SELECT 
COUNT(IF(survey_responses.survey_rating  >= 9),1,NULL)
   AS survey_responses_num_positives

当前代码吐出错误:

No matching signature for function IF for argument types: BOOL. Supported signature: IF(BOOL, ANY, ANY) at [11:39]

不是真的理解它,因为IF语句是BOOL值,不是吗?希望对此有所帮助。谢谢!

3 个答案:

答案 0 :(得分:1)

使用COUNTIF()

SELECT COUNTIF( survey_responses.survey_rating >= 9 ) AS survey_responses_num_positives

BigQuery具有此内置功能,方便使用。我建议使用它。

答案 1 :(得分:0)

您放错了括号:

SELECT 
COUNT(IF(survey_responses.survey_rating  >= 9,1,NULL))
   AS survey_responses_num_positives

IF接受3个参数,条件为true,否则为其他。

答案 2 :(得分:0)

文档:

SELECT IIF ( @a > @b, 'TRUE', 'FALSE' ) AS Result;  

所以

IIF(survey_responses.survey_rating  >= 9 ,1,NULL)

不确定是否可行!让我知道