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

SQLite中如何实现行累加并生成累计列total_col

在SQLite中实现累计求和生成total_col列

要搞定这个需求其实很简单,分两种情况给你说,优先推荐用窗口函数,老版本SQLite也有替代方案:

方法一:用窗口函数(推荐,SQLite 3.25.0+)

从SQLite 3.25.0版本开始,官方支持了窗口分析函数,这是实现累计求和最简洁高效的方式。直接用SUM() OVER()就能按顺序累加:

SELECT 
    date,
    col_1,
    SUM(col_1) OVER (ORDER BY date) AS total_col
FROM your_table;

原理说明

SUM(col_1) OVER (ORDER BY date)的作用是:按照date列的排序顺序,逐行计算从第一行到当前行的col_1总和,完全匹配你要的"第一行值依次与后续行累加"的效果。

方法二:子查询兼容老版本SQLite(3.25.0以下)

如果你的SQLite版本比较老,不支持窗口函数,可以用子查询来实现:

SELECT 
    t1.date,
    t1.col_1,
    (SELECT SUM(col_1) FROM your_table t2 WHERE t2.date <= t1.date) AS total_col
FROM your_table t1
ORDER BY t1.date;

原理说明

对于每一行t1,子查询会筛选出所有日期小于等于当前行日期的记录,然后计算这些记录的col_1总和,最终得到累计值。不过这种方法的效率会比窗口函数低,数据量大的时候会更明显,所以能升级SQLite版本的话优先用第一种方法。


示例验证

用你给出的测试数据来验证:
先创建表并插入数据:

CREATE TABLE test_data (
    date TEXT,
    col_1 INTEGER
);

INSERT INTO test_data (date, col_1)
VALUES 
    ('jan-1', 10),
    ('jan-2', 25),
    ('jan-3', 33),
    ('jan-4', -12),
    ('jan-5', 20);

执行第一种方法的查询后,得到的结果就是你想要的:

date | col_1 | total_col
jan-1 | 10 | 10
jan-2 | 25 | 35
jan-3 | 33 | 68
jan-4 | -12 | 56
jan-5 | 20 | 76

内容的提问来源于stack exchange,提问作者shkhoo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:37:01