hive 查询中的多个计数未给出预期结果

问题描述

我有如下数据。

enter image description here

我试图通过我开发的查询获得以下结果。

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

预期结果

enter image description here

但它给出了以下结果。不确定查询有什么问题,有人可以告诉我如何获得预期的结果。

实际结果

enter image description here

非常感谢您的帮助。

谢谢,巴布

解决方法

删除 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