PostgreSQL查询能否基于Transaction表生成累计ballance字段
逐行累计计算
ballance字段的实现方案 可以直接通过PostgreSQL内置窗口函数完成计算,不需要修改原有表结构,仅通过查询语句就能输出完全符合规则的结果集。
核心计算逻辑
本次需求的逐行累计规则,本质是对每一行的take - give差值,按照id的排序顺序做纵向滚动累计求和,和PostgreSQL SUM() OVER()窗口函数的计算特性完全匹配。
可直接执行的查询语句
SELECT id, Usage, take, give, -- 按id顺序逐行累加take与give的差值 SUM(take - give) OVER (ORDER BY id) AS ballance FROM "Transaction" ORDER BY id;
计算规则匹配验证
上述查询的实际计算过程和要求的规则完全对齐:
- 首条记录无前置累计值,计算结果为当前行
take - give = 10 - 0 = 10 - 第二条记录自动承接上一行的累计值,计算逻辑为
上一行累计值(10) + 当前行(take - give) = 10 + (0 - 40) = -30 - 第三条记录同样承接上一行的累计值,计算逻辑为
上一行累计值(-30) + 当前行(take - give) = -30 + (50 - 0) = 20
常见踩坑提醒
由于Transaction属于SQL通用保留关键字,查询时必须给表名加上双引号,否则PostgreSQL会触发语法解析错误,导致查询执行失败。
内容的提问来源于stack exchange,提问作者Diand
相关产品推荐
相关产品推荐

