如何在SQLite中用另一列的累计总和更新指定列?
刚好做过类似的需求,这其实就是实现累计滚动求和的更新操作,不同数据库的实现方式略有不同,我给你整理几种常用的方案:
解决方案
1. 通用窗口函数方式(适用于PostgreSQL、SQL Server 2012+、MySQL 8.0+等支持窗口函数的数据库)
窗口函数是最简洁高效的实现方式,用SUM()配合OVER()子句就能直接计算累计和:
UPDATE your_table SET COL2 = running_total FROM ( SELECT COL1, SUM(COL1) OVER (ORDER BY COL1) AS running_total FROM your_table ) AS subquery WHERE your_table.COL1 = subquery.COL1;
简单解释:子查询里通过SUM(COL1) OVER (ORDER BY COL1),按COL1的顺序计算出每一行的累计求和结果,再关联原表完成COL2的更新。
2. 旧版MySQL兼容方案(8.0之前不支持窗口函数)
如果你的MySQL版本比较旧,可以用自连接的方式实现累计求和:
UPDATE your_table t1 JOIN ( SELECT t1.COL1, SUM(t2.COL1) AS running_total FROM your_table t1 JOIN your_table t2 ON t2.COL1 <= t1.COL1 GROUP BY t1.COL1 ) t3 ON t1.COL1 = t3.COL1 SET t1.COL2 = t3.running_total;
简单解释:通过自连接让每一行t1关联所有COL1小于等于它的t2行,再对关联到的t2.COL1求和,得到当前行的累计值。
验证结果
执行完更新语句后,执行查询就能得到你想要的结果:
SELECT COL1, COL2 FROM your_table;
输出:
COL1 | COL2
1 | 1
2 | 3
3 | 6
4 | 10
内容的提问来源于stack exchange,提问作者sing lam
相关产品推荐
相关产品推荐

