在 sql 中合并查询结果

Consolidate query results in sql

我的 table

中有以下数据
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

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

您只需要简单的 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

您可以使用 sub-query 或类似的

探索您想要的结果

Impala 中的一个简单公式是:

select least(column1, 3) as id, sum(count1) as count1
from table t 
group by least(column1, 3)
order by min(id);

这不return 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) 一种以正确顺序获取结果集的便捷方法。