[Raw data]
A B C
1 10 1
1 10 2
2 20 3
2 20 4
1 100 5
1 100 6
[Wanted result]
A SUM_OF_B
1 20
2 40
1 200
查询具有简单的'组是不可用的。子句和' dense_rank over partition by'因为分组可以处理所有行。但是我想要在订购状态下进行分组。如何编写正确的查询?
答案 0 :(得分:5)
您需要识别相邻记录的组。实际上,您可以通过使用行数方法的差异来实现此目的 - 假设c
对行进行排序。对于a
的连续值,差异是恒定的:
select a, sum(b)
from (select t.*,
(row_number() over (order by c) -
row_number() over (partition by a order by c)
) as grp
from table t
) t
group by grp, a
order by min(c);