如何在PostgreSQL中将查询结果存入现有表的新列?
解决方案:将分组查询结果更新到现有表的新列中
1. 先添加正确的新列
你的ALTER TABLE语句缺少数据类型定义,需要根据total字段的实际类型(如数值型、浮点型)指定匹配的类型,示例如下:
ALTER TABLE loyalty ADD COLUMN "2013 sales" DECIMAL(10,2); -- 精度可根据业务需求调整
2. 将分组计算的销售总额更新到新列
因为你的查询是按full_name分组汇总的,需要把汇总结果对应到原表中每个员工的所有行里,以下是两种高效的更新方式:
方式一:子查询更新
UPDATE loyalty l SET "2013 sales" = ( SELECT SUM(total) FROM loyalty WHERE full_name = l.full_name AND invoiceyear = 2013 ) -- 仅更新存在2013年销售记录的员工行,避免无数据行被设为NULL WHERE EXISTS ( SELECT 1 FROM loyalty WHERE full_name = l.full_name AND invoiceyear = 2013 );
方式二:JOIN关联更新(性能更优)
UPDATE loyalty l JOIN ( -- 复用你的原分组查询作为关联子表 SELECT full_name, SUM(total) AS sum_sales FROM loyalty WHERE invoiceyear = 2013 GROUP BY full_name ) s ON l.full_name = s.full_name SET l."2013 sales" = s.sum_sales;
注意事项
- 如果
full_name不是员工的唯一标识(比如存在同名员工),建议改用员工ID这类唯一键关联,避免数据匹配错误。 - 新列的数据类型要与
total字段保持一致,比如total是INT则用INT,是DECIMAL则对应调整精度。 - 这是一次性更新操作,若后续还有2013年的销售数据写入,需要重新执行UPDATE语句,或者创建触发器自动维护该列的值。
内容的提问来源于stack exchange,提问作者Pags33
相关产品推荐
相关产品推荐

