问题描述
我有如下数据。
我试图通过我开发的查询获得以下结果。
select date,name,act_cd,type_cd,type
count(distinct CASE WHEN act_cd in (1) THEN key_id ELSE 0 END) as count-of-AB,count(distinct CASE WHEN act_cd in (2) THEN key_id ELSE 0 END) as count-of-CD
FROM table
where act_cd in (1,2)
and type in (MR,LP)
group by date,type
预期结果
但它给出了以下结果。不确定查询有什么问题,有人可以告诉我如何获得预期的结果。
实际结果
非常感谢您的帮助。
谢谢,巴布
解决方法
删除 ELSE
:
select date,name,type_cd,type
count(distinct CASE WHEN act_cd in (1) THEN key_id END) as count_of_AB,count(distinct CASE WHEN act_cd in (2) THEN key_id END) as count_of_CD
from table
where act_cd in (1,2) and
type in ('MR','LP')
group by date,type;
您的代码的问题在于 0
算作 count(distinct)
的值。
另外,在act_cd
中使用group by
是不合适的。
如果保证 key_id
是唯一的(至少在组内),则不要使用 distinct
。我更喜欢 sum()
但你也可以使用 count()
:
select date,type
count(CASE WHEN act_cd in (1) THEN key_id END) as count_of_AB,count(CASE WHEN act_cd in (2) THEN key_id END) as count_of_CD
from table
where act_cd in (1,type;
,
只是一个小错误,否则您的查询没问题,您需要在 else 中传递 null 以不计算它:
select date,act_cd,type
count(distinct CASE WHEN act_cd in (1) THEN 1 ELSE NULL END) as count-of-AB,count(distinct CASE WHEN act_cd in (2) THEN 1 ELSE NULL END) as count-of-CD
FROM table
where act_cd in (1,2)
and type in (MR,LP)
group by date,type