配置单元查询中的多个计数未给出预期结果
Posted
技术标签:
【中文标题】配置单元查询中的多个计数未给出预期结果【英文标题】:Multiple counts in hive query not giving expected results 【发布时间】:2021-02-10 22:05:39 【问题描述】:我有如下数据。
我正在尝试通过我开发的查询获得以下结果。
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,name,act_cd,type_cd,type
预期结果
但它给出了以下结果。不知道查询出了什么问题,谁能告诉我我们如何才能得到预期的结果。
实际结果
非常感谢您的帮助。
谢谢,巴布
【问题讨论】:
【参考方案1】:删除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, name, type_cd, type;
您的代码的问题是 0
算作 count(distinct)
的值。
另外,act_cd
在group by
中是不合适的。
如果保证key_id
是唯一的(至少在一个组中),那么不要使用distinct
。我更喜欢sum()
,但你也可以使用count()
:
select date, name, type_cd, 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, 2) and
type in ('MR','LP')
group by date, name, type_cd, type;
【讨论】:
【参考方案2】:只是一个小错误,否则您的查询没问题,您需要传入 null 否则不计算它:
select date,name,act_cd,type_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,name,act_cd,type_cd,type
【讨论】:
以上是关于配置单元查询中的多个计数未给出预期结果的主要内容,如果未能解决你的问题,请参考以下文章