按顺序排列的SQL

时间:2015-07-14 00:39:27

标签: 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

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

1 个答案:

答案 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);