【问题标题】:Calculating values in rows one by one using sum() over(partition by)使用 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 吗?!

标签: sql group-by sum partition-by


【解决方案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=最后一个交易
猜你喜欢
  • 2019-02-26
  • 2014-03-10
  • 2021-02-19
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 2017-11-02
  • 2021-05-06
相关资源
最近更新 更多