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
相关产品推荐
相关产品推荐

