如何在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中对相邻行进行分组并对数据求和的主要内容,如果未能解决你的问题,请参考以下文章