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

PostgreSQL批量更新相同item记录的inum字段为最大值

PostgreSQL实现按item分组更新inum为组内最大值

原表数据

nameiteminum
na1k15
na2k16
na3k27
na4k37
na5k38

需求目标

将每个item分组下的所有记录的inum字段更新为该组内inum的最大值,更新后结果如下:

nameiteminum
na1k16
na2k16
na3k27
na4k38
na5k38

实现代码

方法1:子查询关联更新(适合小数据集)

-- 仅更新需要修改的记录(避免无意义更新)
UPDATE your_table t
SET inum = (SELECT MAX(inum) FROM your_table WHERE item = t.item)
WHERE EXISTS (
    SELECT 1 FROM your_table WHERE item = t.item AND inum > t.inum
);

-- 如果需要强制更新所有记录(包括已经是最大值的行),可去掉WHERE条件
UPDATE your_table t
SET inum = (SELECT MAX(inum) FROM your_table WHERE item = t.item);

方法2:窗口函数+CTE(大数据量更高效)

假设name是表的唯一标识字段(如果有主键,建议用主键关联):

WITH item_max_cte AS (
    SELECT 
        name,
        MAX(inum) OVER (PARTITION BY item) AS group_max_inum
    FROM your_table
)
UPDATE your_table t
SET inum = im.group_max_inum
FROM item_max_cte im
WHERE t.name = im.name;

说明

  • 请将代码中的your_table替换为你的实际表名
  • 如果表有主键(比如id),方法2中用主键关联比name更可靠,避免name重复导致的错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:22:33