首页 > 解决方案 > 如何在SQL中对相邻行进行分组并对数据求和

问题描述

我想对值求和并对 SQL 中的相邻行进行分组,如下所示。我可以知道该怎么做吗?

我现在的代码:

Select ID, Value from Table_1 

例子

进一步的问题

这个怎么样?

进一步_示例

标签: sql-servertsqlgroup-bywindow-functionsgaps-and-islands

解决方案


这是一个典型的差距和孤岛问题。

作为初学者:请记住,SQL 表表示无序的行集。因此,要解决您的问题,您需要一个定义表中行顺序的列 - 我假设ordering_id

这是一种使用之间的差异row_numbers()来构建具有相同的相邻行组的方法id

select 
    id,
    sum(value) value
from (
    select 
        t.*,
        row_number() over(order by ordering_id) rn1
        row_number() over(partition by id order by ordering_id) rn2
    from mytable t
) t
group by id, rn1 - rn2

如果您希望针对每个用户进行此操作:

select 
    user,
    id,
    sum(value) value
from (
    select 
        t.*,
        row_number() over(partition by user order by ordering_id) rn1
        row_number() over(partition by user, id order by ordering_id) rn2
    from mytable t
) t
group by user, id, rn1 - rn2

推荐阅读