我有一个包含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
有人可以让我知道为什么即使应用了案例条件后输出的计数结果也不正确吗?
答案 0 :(得分:3)
使用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()
更简单明了。
答案 1 :(得分:1)
使用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