преобразование списка оракулов в postgres - PullRequest
0 голосов
/ 26 мая 2018

Я пытаюсь преобразовать некоторые запросы Oracle в Postgres и наткнулся на listagg.

Код Oracle

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;

1 Ответ

0 голосов
/ 26 мая 2018

В Postgres предложение within group используется только для агрегатных функций с заданным порядком - т. Е. Функций, которым требуется предложение order by (например, процентильные функции).Необязательное предложение order by, такое как string_agg, входит в аргументы функции:

SELECT   MAX(eta) eta, mso_id, STRING_AGG(carrier_name, ',' ORDER BY eta) AS carrier 
FROM     tb_flight_schedule
GROUP BY mso_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...