如何用累计值更新表中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
相关产品推荐
相关产品推荐

