如何在SQL中对相邻行进行分组并对数据求和

Posted

技术标签:

【中文标题】如何在SQL中对相邻行进行分组并对数据求和【英文标题】:How to group adjacent row and sum the data in SQL 【发布时间】:2020-04-21 08:36:39 【问题描述】:

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

我现在的代码:

Select ID, Value from Table_1 

另一个问题

这个怎么样?

【问题讨论】:

请阅读this,了解一些改进问题的技巧。 【参考方案1】:

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

首先:请记住,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

【讨论】:

当我有 2 个用户时,我可以知道如何修改代码吗?您可以参考进一步的截图

以上是关于如何在SQL中对相邻行进行分组并对数据求和的主要内容,如果未能解决你的问题,请参考以下文章

如何在 XSLT 中对值进行分组和求和

我如何基于一定值在jupyter中对数据进行分组?

Pandas Dataframe - 按照Col A分组并对每个组进行求和[C]重复

如何动态生成表并对行进行分组

如何在 MySQL 中对行进行求和

如何在golang中按多个值分组并对多个值求和