我的表格中有以下数据
column1 count1
1 2
2 3
2 5
3 4
3 1
4 3
5 4
6 7
7 3
8 0
9 2
10 1
以下是我想要的输出:
id sum(count1)
1 2
2 8
3+ 25
以下是我正在使用的查询:
SELECT column1 AS id,sum(count1) FROM test
WHERE column1 < 3
GROUP BY id
UNION
SELECT '3+' AS id,sum(count1) FROM test
WHERE column1 >= 3
GROUP BY id
这是一种相当低效的方式,因为我们扫描了两次表。有没有更好的方法呢?
答案 0 :(得分:1)
您只需要简单的GROUP BY
子句,但条件与case
表达式
select
case when column1 >= 3 then 3 else column1 end AS id, sum (count1) count1
from table t
group by case when column1 >= 3 then 3 else column1 end
您可以使用子查询或类似的东西
来探索您想要的结果答案 1 :(得分:0)
Impala中的一个简单配方是:
select least(column1, 3) as id, sum(count1) as count1
from table t
group by least(column1, 3)
order by min(id);
这不会返回3+
。为此,我们需要注意类型:
select (case when column1 < 3 then cast(column1 as string) else '3+' end) as id, sum(count1)
from table t
group by (case when column1 < 3 then cast(column1 as string) else '3+' end)
order by min(id);
我还发现order by min(id)
是一种以正确顺序获取结果集的便捷方式。