Ошибка: нет соответствующей подписи для функции ЕСЛИ для типов аргументов: BOOL. Поддерживаемая подпись: IF(BOOL, ANY, ANY)

Я пытаюсь подсчитать, сколько раз «рейтинг» был выше 9. Работа в Google BigQuery с StandardSQL

Ранее я использовал функцию 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, нет? Был бы признателен за любую помощь в этом. Спасибо!


person cr2419    schedule 09.05.2019    source источник
comment
Почему вы не используете SELECT COUNT(*) FROM Survey_responses WHERE Survey_rating › 1   -  person Jason Geiger    schedule 09.05.2019
comment
Извините, я не опубликовал полный код, так как остальное не имело значения. Но в нем есть несколько других операторов IF.   -  person cr2419    schedule 10.05.2019


Ответы (3)


Вы пропустили скобку:

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

IF принимает 3 аргумента, условие, если оно истинно, и еще.

person TheWildHealer    schedule 09.05.2019
comment
случается, хотя такие вопросы, как ваш, могут рассматриваться как не по теме, будьте осторожны в дальнейшем - person TheWildHealer; 09.05.2019

Используйте 1_!

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

В BigQuery это встроенная удобная функция. Я рекомендую использовать его.

person Gordon Linoff    schedule 09.05.2019

Документация :

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

So

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

Не уверен, что это работает! Так дайте мне знать

person Tim Vd    schedule 09.05.2019