在sql中合并查询结果

rfbsl7qr  于 2021-06-26  发布在  Impala
关注(0)|答案(2)|浏览(396)

我的表中有以下数据

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

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

bq9c1y66

bq9c1y661#

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) 以正确的顺序获得结果集的方便方法。

s71maibg

s71maibg2#

你只需要简单点 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

您可以使用子查询或类似的方法来探索所需的结果

相关问题