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

如何在pgAdmin中将分组统计结果写入PostgreSQL表列?

解决PostgreSQL UPDATE子查询返回多行的错误

你的错误原因是UPDATE语句中的子查询未正确关联外部表:子查询里的WHERE customer_id=customer_id是将子查询内部的summary表字段与自身比较,并非关联正在更新的外部行,导致子查询返回所有分组的统计结果(多行),而SET赋值需要单行结果,因此触发more than one row returned错误。

以下是三种可行的解决方法:

方法一:关联子查询(明确指定表别名)

通过给外部表和子查询表设置不同别名,让子查询仅返回当前更新行对应customer_id的统计值:

UPDATE summary s1
SET sum_of_rentals = (
    SELECT count(*)
    FROM summary s2
    WHERE s2.customer_id = s1.customer_id
)

方法二:预统计后关联更新(高效大表场景)

先预先统计所有customer_id的计数结果,再通过FROM子句关联原表进行更新,适合数据量较大的场景:

UPDATE summary s
SET sum_of_rentals = agg.count_rentals
FROM (
    SELECT customer_id, count(*) AS count_rentals
    FROM summary
    GROUP BY customer_id
) agg
WHERE s.customer_id = agg.customer_id;

方法三:窗口函数更新(单次扫描实现)

利用窗口函数PARTITION BY直接计算每个customer_id的行数,再关联更新:

UPDATE summary
SET sum_of_rentals = cnt
FROM (
    SELECT customer_id, count(*) OVER (PARTITION BY customer_id) AS cnt
    FROM summary
) sub
WHERE summary.customer_id = sub.customer_id;

内容的提问来源于stack exchange,提问作者J.Chambers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:42:38