配置单元:将group by语句中的空结果替换为0

3npbholx  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(273)

我是一个新的配置单元用户,需要为给定的表聚合金额总和。考虑下面的简化示例:

SELECT day, sum(amount) FROM tableX WHERE columnA = 'RareValue' GROUP BY day;

假设有可能没有与中的条件匹配的行条目 WHERE 一些日期的条款。因此查询结果将跳过这些天。
例如,我得到的结果是:

date       amount
2018-01-15 230
2018-01-13 210
2018-01-12 140
2018-01-11 222

但这是期望的结果:

date       amount
2018-01-15 230
2018-01-14 0
2018-01-13 210
2018-01-12 140
2018-01-11 222

我试着生成一个日期序列,然后使用 LEFT JOIN 以及 COALESCE 用零填充空日期。然而,演出非常缓慢。最好的方法是什么?

62lalag4

62lalag41#

假设你想排除一整天,以防你的where条件为真,你可以这样做

select 
day,
if(max(mycondition) = 0, sum(amount), 0) as mysum from 
(
select day, amount, 
if(columnA = 'RareValue', 1, 0) as mycondition
FROM tableX 
) t GROUP BY day;

我没有机会测试它:)

5anewei6

5anewei62#

如果我理解正确的话,所有需要的天数都列在表格中。因此,我建议首先选择columna不等于'rarevalue'的所有行,并将其与查询合并。

SELECT day, 0 FROM tableX WHERE columnA != 'RareValue'
UNION
SELECT day,sum(amount) from tableX WHERE columnA = 'RareValue' GROUP BY day;

如果从第一次选择开始的日期重复,您可以添加“distinct”

相关问题