PostgreSQL中如何添加列并使用max()函数基于其他列填充?
解决PostgreSQL新增列并填充另一列最大值的问题
你之前的两种写法都存在问题:
- 第一种用
INSERT的方式错误,INSERT是用来添加新行的,不是更新已有行的字段值; - 第二种
UPDATE语句直接在SET里使用MAX()聚合函数不符合语法,PostgreSQL不允许在这个位置直接调用聚合函数。
正确的做法是先通过子查询获取veggie_id的最大值,再用这个值更新所有行的max_veggie列:
-- 新增列(这一步你写的是对的) ALTER TABLE stable ADD COLUMN max_veggie INTEGER; -- 用veggie_id的最大值填充新增列 UPDATE stable SET max_veggie = (SELECT MAX(veggie_id) FROM stable);
如果你的表数据量极大,想优化性能,也可以用关联子查询的写法:
UPDATE stable SET max_veggie = mv.max_val FROM (SELECT MAX(veggie_id) AS max_val FROM stable) mv;
这两种写法都会把stable表中所有行的max_veggie列设置为veggie_id列的全局最大值。
内容的提问来源于stack exchange,提问作者miranda harvey
相关产品推荐
相关产品推荐

