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

SQL查询中如何实现带指定初始值的滚动累计求和?

需求实现方案

该需求完全可以在SQL中实现,以下是具体实现方法:

实现思路

  1. 先构造序号为0、变动值为0的初始行,和原表的数值行合并
  2. 取出NUMBERLIST表中的初始累计值
  3. 按SERIAL字段排序,对CHANGE字段做滚动累加,再加上初始值即可得到目标结果

标准SQL实现(支持窗口函数的数据库,如MySQL 8.0+、PostgreSQL、Oracle、SQL Server等)

WITH base_data AS (
    -- 合并初始行和原表数据
    SELECT 0 AS SERIAL, 0 AS CHANGE
    UNION ALL
    SELECT SERIAL, CHANGE FROM `TABLE`
),
initial_value AS (
    -- 取累计初始值,假设NUMBERLIST仅返回一行结果,可根据业务加过滤条件
    SELECT NUMBER AS init_num FROM NUMBERLIST
)
SELECT
    SERIAL,
    CHANGE,
    (SELECT init_num FROM initial_value) + SUM(CHANGE) OVER (ORDER BY SERIAL ASC) AS CUMULATIVE
FROM base_data
ORDER BY SERIAL ASC;

老版本数据库实现(不支持窗口函数,如MySQL 5.x)

-- 先获取初始累计值
SET @init_num = (SELECT NUMBER FROM NUMBERLIST);
-- 初始化累计变量
SET @cumulative = @init_num;

SELECT
    SERIAL,
    CHANGE,
    @cumulative := @cumulative + CHANGE AS CUMULATIVE
FROM (
    SELECT 0 AS SERIAL, 0 AS CHANGE
    UNION ALL
    SELECT SERIAL, CHANGE FROM `TABLE`
) AS total_data
ORDER BY SERIAL ASC;

以上两种写法执行后都会得到你需要的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:45:04