将 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
并着手将 listagg
与 string_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;
我正在尝试将一些 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
并着手将 listagg
与 string_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;