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