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

如何解决PostgreSQL子查询返回多行的报错并获取预期聚合结果?

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

问题场景

先创建临时表并插入测试数据:

CREATE TEMPORARY TABLE IF NOT EXISTS "tmp" 
(
    "fuel_type" TEXT,
    "litres" NUMERIC(8,2),
    "is_rent" BOOLEAN
);
insert into tmp values ('petrol', 10, False);
insert into tmp values ('petrol', 20, False);
insert into tmp values ('diesel', 20, False);

执行以下查询时触发错误:

SELECT
    (SELECT row(fuel_type, SUM(litres)) 
     FROM tmp 
     GROUP BY fuel_type);

错误提示:

SQL Error [21000]: ERROR: more than one row returned by a subquery used as an expression

期望得到的输出:

ARRAY_AGG
fuel_type|litres
petrol,40
diesel,20

解决方法

错误原因是将返回多行的子查询作为单个表达式使用,PostgreSQL不允许这种操作。要实现需求,直接用ARRAY_AGG函数包裹聚合后的行即可:

SELECT ARRAY_AGG(row(fuel_type, SUM(litres))) AS array_agg
FROM tmp
GROUP BY fuel_type;

如果需要更直观的结构化输出,也可以直接返回分组统计结果:

SELECT fuel_type, SUM(litres) AS total_litres
FROM tmp
GROUP BY fuel_type;

该查询返回结果:

fuel_type | total_litres
----------+--------------
petrol    | 40.00
diesel    | 20.00

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 23:20:58