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

PostgreSQL按客户分组递增更新number列的SQL脚本求助

解决方案

直接使用PostgreSQL的窗口函数ROW_NUMBER()即可实现需求,无需使用sequence(sequence是全局自增序列,不适合按分组单独编号的场景)。

单条UPDATE语句

假设你希望按id字段的顺序(代表记录的插入/存储顺序)为每个client_id生成从1开始的递增编号,执行以下语句:

UPDATE your_table t
SET number = sub.rn
FROM (
    SELECT id,
           ROW_NUMBER() OVER (PARTITION BY client_id ORDER BY id) AS rn
    FROM your_table
) sub
WHERE t.id = sub.id;

关键说明

  • PARTITION BY client_id:将数据按client_id分组,每个分组独立计算编号
  • ORDER BY id:指定分组内的排序规则,确保编号按你需要的"记录顺序"生成;如果需要按其他字段排序(比如amount或时间字段),替换id为对应字段即可
  • 子查询会先为每条记录计算出对应的序号rn,再通过id关联原表完成更新

验证结果

执行更新前,可先运行子查询查看预期结果是否符合要求:

SELECT id, client_id, number,
       ROW_NUMBER() OVER (PARTITION BY client_id ORDER BY id) AS expected_number
FROM your_table;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 01:03:12