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
相关产品推荐
相关产品推荐

