HIVE:将组中的空结果替换为0

时间:2018-05-07 20:06:29

标签: hive aggregate-functions

我是新的Hive用户,需要汇总给定表的金额总和。考虑下面的简化示例:

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

我尝试this生成一系列日期,然后使用LEFT JOINCOALESCE以零填充空日期。然而,表现非常糟糕。对此最好的方法是什么?

2 个答案:

答案 0 :(得分:0)

如果您的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;

我没有机会测试它:)

答案 1 :(得分:0)

如果我正确理解你所有需要的日子都会在tableX表中显示。所以,我建议先选择columnA不相等的所有行' RareValue'和你的查询UNION它。

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

如果第一次选择重复的日期可以添加' distinct'