我是新的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 JOIN
和COALESCE
以零填充空日期。然而,表现非常糟糕。对此最好的方法是什么?
答案 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'