将 oracle 的 listagg 转换为 postgres

converting oracle's listagg to postgres

我正在尝试将一些 Oracle 查询转换为 Postgres 并遇到 listagg

甲骨文代码

select max(eta) eta, mso_id, listagg(carrier_name, ',') 
within group (order by eta) as carrier 
from tb_flight_schedule group by mso_id;

我发现 Postgres 中 listagg 的等价物是 string_agg 并着手将 listaggstring_agg 交换。但是,我遇到了错误(错误:函数string_agg(字符变化,未知,日期)不存在)。我在查询中遗漏了什么吗? Postgres 查询如下:

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

在 Postgres 中,within group 子句仅用于有序集合聚合函数 - 即 需要 一个 order by 子句的函数(例如,百分位函数)。可选的 order by 子句,例如 string_agg's,位于函数的参数中:

SELECT   MAX(eta) eta, mso_id, STRING_AGG(carrier_name, ',' ORDER BY eta) AS carrier 
FROM     tb_flight_schedule
GROUP BY mso_id;