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

PostgreSQL:根据条件替换medications表的药物类型字段值

PostgreSQL实现:将同时存在两种类型的药物type替换为INDEFINIDO

需求说明

针对medications表,需要将同时存在GENÉRICO和REFERÊNCIA两种类型的药物,其所有type字段替换为INDEFINIDO,其他药物保持原有类型不变。

方案1:查询输出(不修改原表)

如果只是需要查询得到目标结果,不需要改动原表数据,可以使用窗口函数实现:

SELECT 
    medication_name,
    CASE 
        WHEN COUNT(DISTINCT type) OVER (PARTITION BY medication_name) = 2 
        THEN 'INDEFINIDO' 
        ELSE type 
    END AS type
FROM medications;

逻辑说明:

  • COUNT(DISTINCT type) OVER (PARTITION BY medication_name) 是窗口函数,会按medication_name分组,统计每个药物对应的不同类型数量。
  • 当统计结果为2时(说明该药物同时存在两种类型),返回INDEFINIDO;否则保留原type值。

方案2:更新原表数据

如果需要直接修改原表中的数据,可以结合子查询定位目标药物,再执行更新:

UPDATE medications
SET type = 'INDEFINIDO'
WHERE medication_name IN (
    SELECT medication_name
    FROM medications
    GROUP BY medication_name
    HAVING COUNT(DISTINCT type) = 2
);

逻辑说明:

  • 子查询通过GROUP BY和HAVING条件,筛选出同时拥有两种类型的药物名称。
  • 外层UPDATE语句将这些药物的所有type字段统一设置为INDEFINIDO。

执行上述任意方案后,都能得到你期望的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:13:26