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

如何在SQL(Redshift)中按行(而非列)计算累积和?

在Redshift中按行内列顺序计算累积和的方法

针对你需要按id分组、在每行内从week_1到week_4依次计算累积和的需求,这里有两种实用的解决办法:

方法一:直接列累加(适合列数固定且较少的场景)

如果你的周数列数量不多且固定,直接通过算术运算累加最直接,代码简洁易读:

SELECT
    id,
    week_1,
    week_1 + week_2 AS week_2,
    week_1 + week_2 + week_3 AS week_3,
    week_1 + week_2 + week_3 + week_4 AS week_4
FROM your_table;

执行后就能得到每行从week_1开始的累积和结果,和你给出的期望输出完全一致。

方法二:UNPIVOT转成行计算再转回列(适合列数较多的场景)

如果后续周数列可能增加,或者当前列数较多,用转置的方式更灵活:

-- 第一步:把横向的周列转成纵向的行
WITH unpivoted AS (
    SELECT
        id,
        -- 提取周数的数字部分,用于排序
        CAST(REPLACE(week_col, 'week_', '') AS INT) AS week_num,
        value
    FROM your_table
    UNPIVOT (
        value FOR week_col IN (week_1, week_2, week_3, week_4)
    ) AS unpvt
),
-- 第二步:按id分组、周数排序计算累积和
cumulative AS (
    SELECT
        id,
        week_num,
        SUM(value) OVER (PARTITION BY id ORDER BY week_num) AS cum_sum
    FROM unpivoted
)
-- 第三步:把纵向的累积和转回横向的列
SELECT
    id,
    MAX(CASE WHEN week_num = 1 THEN cum_sum END) AS week_1,
    MAX(CASE WHEN week_num = 2 THEN cum_sum END) AS week_2,
    MAX(CASE WHEN week_num = 3 THEN cum_sum END) AS week_3,
    MAX(CASE WHEN week_num = 4 THEN cum_sum END) AS week_4
FROM cumulative
GROUP BY id;

这种方法通过三次转换实现需求,扩展性更强,后续加新的周列时,只需要修改UNPIVOT和最后SELECT里的CASE语句即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 15:10:38