BigQuery: случай, когда выражение для Count из того же столбца, но с другими условиями - PullRequest
0 голосов
/ 01 марта 2019

У меня есть таблица с 2 столбцами, как показано ниже:

Col 1    | col_stats
Field 1  |   open
Field 2  |   close
Field 1  |   close
Field 1  |   open

Я хочу, чтобы выходной сигнал был следующим:

Col1    | cnt_open | Cnt_close
Field 1 |  2          | 1             
Field 2 |  0          | 1             

** Я написалзапрос **

select col 1, count(case when col_stats= 'open' then 1 else 0 END) cnt_open,
count (case when col_stats= 'close' then 1 else 0  END ) cnt_close 
from `project.dataset.tablename`
group by col1

Результирующий вывод из вышеприведенного запроса неверен:

Col1    | cnt_open | Cnt_close  
Field 1 |  2          | 2             
Field 2 |  1          | 1  

Может кто-нибудь сообщить мне, почему вывод дает неправильный результат для подсчета дажепосле того, как условие случая применено?

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Используйте null вместо 0:

select col1, count(case when col_stats= 'open' then 1 else null END) cnt_open,
count (case when col_stats= 'close' then 1 else null  END ) cnt_close 
from `project.dataset.tablename`
group by col1
0 голосов
/ 01 марта 2019

Использование countif():

select col1, countif(col_stat = 'open') as num_opens, countif(col_stat = 'closed') as num_closes
from t
group by col1;

В SQL count() подсчитывает количество не NULL значений.Ваш код будет работать с sum().Но countif() проще и понятнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...