You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:34:47