SQL:在考虑行顺序的情况下聚合组内的记录
SQL: Aggregate records within a group taking into account rows order
我有一个table结构如下
| id | a | b |
| 1 | 1 | 1 |
| 2 | 1 | 5 |
| 3 | 2 | 2 |
| 4 | 2 | 3 |
| 5 | 2 | 5 |
| 6 | 1 | 3 |
| 7 | 1 | 7 |
| 8 | 3 | 1 |
| 9 | 2 | 0 |
| 10 | 4 | 8 |
并且需要在列"a"中的每个组中计算列"b"中的总和,但考虑到行的顺序,即首先我们应该添加1 + 5
对于 a == 1
(id
s 1 和 2),然后我们将为 a = 2
(id
s 3、4、5)添加 2 + 3 + 5
,依此类推。
因此,在结果中我需要像这样 table
| a | sum(b) |
| 1 | 6 |
| 2 | 10 |
| 1 | 10 |
| 3 | 1 |
| 2 | 0 |
| 4 | 8 |
请帮助编写一个 SQL 查询来执行此操作。
select a,sum(b)
from (select *
,row_number () over (order by id) as rn
,row_number () over (partition by a order by id) as rnp
from t
) t
group by a,rn - rnp
order by min(id)
;
P.s.
我不指望 ID 是连续的
我有一个table结构如下
| id | a | b |
| 1 | 1 | 1 |
| 2 | 1 | 5 |
| 3 | 2 | 2 |
| 4 | 2 | 3 |
| 5 | 2 | 5 |
| 6 | 1 | 3 |
| 7 | 1 | 7 |
| 8 | 3 | 1 |
| 9 | 2 | 0 |
| 10 | 4 | 8 |
并且需要在列"a"中的每个组中计算列"b"中的总和,但考虑到行的顺序,即首先我们应该添加1 + 5
对于 a == 1
(id
s 1 和 2),然后我们将为 a = 2
(id
s 3、4、5)添加 2 + 3 + 5
,依此类推。
因此,在结果中我需要像这样 table
| a | sum(b) |
| 1 | 6 |
| 2 | 10 |
| 1 | 10 |
| 3 | 1 |
| 2 | 0 |
| 4 | 8 |
请帮助编写一个 SQL 查询来执行此操作。
select a,sum(b)
from (select *
,row_number () over (order by id) as rn
,row_number () over (partition by a order by id) as rnp
from t
) t
group by a,rn - rnp
order by min(id)
;
P.s.
我不指望 ID 是连续的