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

如何用累计值更新表中ACCUMULATE_PERCENTAGE列?求UPDATE示例

基于窗口函数累计值更新表字段的正确SQL示例

你之前的查询已经正确计算出分组累计值,要将结果更新到ACCUMULATE_PERCENTAGE列,核心是把窗口函数的计算结果和原表通过唯一标识关联,以下是不同数据库兼容的写法:

方法1:用CTE(推荐,适用于PostgreSQL、SQL Server、MySQL 8.0+)

WITH calc_cumulative AS (
    SELECT
        -- 替换为你的表主键或唯一识别字段,比如id
        id,
        round(SUM(percentage_compared_to_sust) OVER (
            PARTITION BY sust_from
            ORDER BY sust_from, percentage_compared_to_sust DESC
        ), 2) AS cumulative_val
    FROM table_01
)
UPDATE table_01 t
SET ACCUMULATE_PERCENTAGE = cc.cumulative_val
FROM calc_cumulative cc
WHERE t.id = cc.id;

方法2:子查询关联(通用兼容写法)

UPDATE table_01 main
SET ACCUMULATE_PERCENTAGE = (
    SELECT round(SUM(sub.percentage_compared_to_sust) OVER (
        PARTITION BY sub.sust_from
        ORDER BY sub.sust_from, sub.percentage_compared_to_sust DESC
    ), 2)
    FROM table_01 sub
    WHERE sub.id = main.id
);

重要提醒:

  • 必须使用唯一标识字段(如主键id)关联原表和计算结果,否则会错误地将多条记录设置为同一累计值,这是多数UPDATE失败的核心原因。
  • 执行更新前,建议先把UPDATE语句改成SELECT,验证关联后的累计值是否匹配预期,避免误更新。
  • 如果是MySQL 5.x版本,因不支持窗口函数,需要用变量手动计算累计值再更新,写法会有所不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 19:43:15