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

PostgreSQL中如何根据同表其他列条件修改指定列值?

在PostgreSQL中按分组条件替换列值的实现方法

完全可以实现,以下提供两种常见场景的解决方案:

场景1:仅查询替换后的数据(不修改原表)

如果只是需要查看替换后的结果,不需要改动原表数据,可以使用窗口函数结合CASE语句实现:

SELECT 
    Cntry,
    Code,
    CASE 
        WHEN Code = 'C14' 
        THEN MAX(CASE WHEN Code = 'C11' THEN Value END) OVER (PARTITION BY Cntry)
        ELSE Value
    END AS Value
FROM your_table_name;

逻辑说明:

  • PARTITION BY Cntry 按国家分组处理数据
  • 内层CASE WHEN Code = 'C11' THEN Value END 筛选出每组内Code为C11的Value
  • MAX() 配合窗口函数确保每个分组只取到唯一的C11对应值(若每组C11唯一,用MAX/MIN/FIRST_VALUE效果一致)
  • 外层CASE语句判断当前行Code是否为C14,是则替换为同组C11的Value,否则保留原Value

场景2:永久更新原表数据

如果需要直接修改原表中符合条件的行数据,可以使用UPDATE语句结合关联子查询:

UPDATE your_table_name t1
SET Value = (
    SELECT Value 
    FROM your_table_name t2 
    WHERE t2.Cntry = t1.Cntry AND t2.Code = 'C11'
)
WHERE t1.Code = 'C14';

逻辑说明:

  • 子查询通过Cntry关联,找到当前行所属分组中Code为C11的Value
  • 仅更新Code = 'C14'的行,将其Value替换为对应分组C11的Value

注意:执行UPDATE前建议先运行场景1的SELECT语句验证结果,确认无误后再执行更新操作,避免误修改数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:55:25