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

