配置单元查询中的多个计数未给出预期结果

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_cdgroup 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

【讨论】:

以上是关于配置单元查询中的多个计数未给出预期结果的主要内容,如果未能解决你的问题,请参考以下文章

如何在配置单元查询中应用多个计数

SQL 查询未按预期给出结果

Gmail REST API 线程搜索未给出预期结果

列表中的元素计数未产生预期结果

INTERVAL 30 DAY 未给出预期结果

regexp_extract 配置单元未按预期工作