按顺序排列的SQL

wiz*_*wiz 1 sql oracle

[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
Run Code Online (Sandbox Code Playgroud)

查询具有简单的'group by'子句和'dense_rank over partition by'是不可用的,因为分组可以处理所有行.但是我想要在订购状态下进行分组.如何编写正确的查询?

Gor*_*off 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);
Run Code Online (Sandbox Code Playgroud)