使用 sum() over(partition by) 逐一计算行中的值

Posted

技术标签:

【中文标题】使用 sum() over(partition by) 逐一计算行中的值【英文标题】:Calculating values in rows one by one using sum() over(partition by) 【发布时间】:2021-12-30 19:30:12 【问题描述】:

我有下表(TableX):

目标是计算每个 account_id 的变化并显示结束值:

因此,当account_id=1时,值为500-100=400,当account_id=2时,值为300+100-300=100。

我尝试了以下查询,但没有给出我希望的结果:

SELECT SUM(change) OVER(PARTITION BY account_id) FROM TableX GROUP BY Account_id

【问题讨论】:

这是 mysql 吗?! 【参考方案1】:

您只想在这里使用SUM 作为聚合函数:

SELECT Account_id, SUM(change)
FROM TableX
GROUP BY Account_id;

这里是你如何使用SUM()作为一个分析函数没有GROUP BY

SELECT Account_id, Change, SUM(change) OVER (PARTITION BY Account_id) total
FROM TableX
ORDER BY Account_id;

这将生成以下输出:

Account_id | Change | total
1          | 500    | 400
1          | -100   | 400
2          | 300    | 100
2          | 100    | 100
2          | -300   | 100

如您所见,您的查询的分析函数版本返回表中的所有原始记录。

【讨论】:

谢谢!您将如何计算每个 account_id 的最大账户余额? (Account_id 1 为 500,Account_id 2 为 400) 您还需要让我们知道哪一列提供了交易的排序。顺便说一句,您最初的问题已经得到解答。 TableX 中的“id”列提供了排序。 Id 1 = 第一个交易,id5=最后一个交易

以上是关于使用 sum() over(partition by) 逐一计算行中的值的主要内容,如果未能解决你的问题,请参考以下文章

SUM() OVER (PARTITION BY) AS - 存在重复项时

在mysql中使用sum() over(Partition by)组合多行数据

使用 sum() over(partition by) 逐一计算行中的值

Oracle SQL:使用 SUM OVER PARTITION 更新表

Hive sum over partition preceding following 累计求和

MariaDB 查询 SUM() OVER (PARTITION BY)