在sql中合并查询结果

时间:2018-03-17 05:36:06

标签: sql impala

我的表格中有以下数据

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

这是一种相当低效的方式,因为我们扫描了两次表。有没有更好的方法呢?

2 个答案:

答案 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)是一种以正确顺序获取结果集的便捷方式。