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

PostgreSQL中如何为字段值互换的记录分配相同组编号

PostgreSQL 互换关系记录分组实现方案

实现思路

对每行的Ref和Comp字段做值大小排序,互换关系的两行会生成完全一致的排序后组合,再基于该组合分配相同组编号即可。

实现代码

临时查询(直接输出结果)

假设你的原表名为rel_pairs,执行以下查询即可得到目标输出:

SELECT
    DENSE_RANK() OVER(ORDER BY LEAST(Ref, Comp), GREATEST(Ref, Comp)) AS "GROUP",
    Ref AS REF,
    Comp AS COMP
FROM rel_pairs;

持久化到表结构

如果需要把组编号作为固定列存入原表,执行以下两步操作:

  1. 新增组编号字段
ALTER TABLE rel_pairs ADD COLUMN "GROUP" INT;
  1. 批量更新组编号值
WITH pair_group_mapping AS (
    SELECT
        Ref,
        Comp,
        DENSE_RANK() OVER(ORDER BY LEAST(Ref, Comp), GREATEST(Ref, Comp)) AS group_num
    FROM rel_pairs
)
UPDATE rel_pairs rp
SET "GROUP" = pgm.group_num
FROM pair_group_mapping pgm
WHERE rp.Ref = pgm.Ref AND rp.Comp = pgm.Comp;

验证查询

执行以下语句即可查看最终结果:

SELECT "GROUP", REF, COMP FROM rel_pairs;

输出效果:

GROUP | REF | COMP
-------+-----+------
     1 | A   | B
     1 | B   | A

注意事项

  • GROUP为SQL保留关键字,引用时必须加双引号,实际使用建议替换为group_id等非关键字字段名避免歧义
  • 若表中存在重复的(Ref, Comp)记录,该逻辑依然生效,相同组合会被分配到同一组
  • 若不需要连续组编号,可将DENSE_RANK替换为RANK函数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:09:03