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

Oracle的listagg转PostgreSQL string_agg时遇错求助

解决PostgreSQL中string_agg函数的语法错误问题

嘿,这个坑我之前踩过!你遇到的错误是因为PostgreSQL的string_agg函数语法和Oracle的listagg并不完全一致,你沿用了Oracle的WITHIN GROUP (ORDER BY ...)写法,但PostgreSQL并不支持这种格式。

问题根源

Oracle的listagg需要用WITHIN GROUP来指定聚合时的排序规则,但PostgreSQL的string_agg把排序作为函数的可选参数直接嵌入,不需要额外的子句包裹。

正确的PostgreSQL语句

把排序逻辑直接放到string_agg的参数里,去掉WITHIN GROUP部分就可以了:

select max(eta) eta, mso_id, string_agg(carrier_name, ',' ORDER BY eta) as carrier 
from tb_flight_schedule 
group by mso_id;

补充说明

PostgreSQL的string_agg标准语法是:

string_agg(expression, separator [ORDER BY sort_expression [ASC | DESC] [, ...]])

你可以在分隔符后面直接添加ORDER BY来指定聚合字符串的排序顺序,和你想要实现的效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:52:18