BigQuery:当表达式要从同一列但条件不同时进行计数时的情况

时间:2019-03-01 17:25:16

标签: sql google-bigquery

我有一个包含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 :(得分: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