使用 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 更新表