#postgresql #aggregate-functions
Вопрос:
Я создал пользовательский агрегат в pl/pgsql, который требует, чтобы строки были отсортированы определенным образом по входным столбцам. Я могу сделать это, используя ORDER BY
в совокупном вызове. Я бы хотел, чтобы эта сортировка происходила без явного указания ORDER BY
в совокупном вызове.
Например, у меня есть агрегатная функция f(текст A, текст B). Я могу получить из него правильный расчет, назвав его так:
select
X,
Y,
f(A, B order by A, B)
from
table
group by
X,
Y
Я хочу иметь возможность называть это так и указывать сортировку где-то в определении пользовательского агрегата.
select
X,
Y,
f(A, B)
from
table
group by
X,
Y
Возможно ли это?
Комментарии:
1. Я знаю, что в некоторых случаях вы добьетесь этого, если ваши данные будут вставлены в правильном порядке (и номер строки вам поможет), но, насколько я знаю, вы должны использовать
ORDER BY
, если хотите быть уверены, что порядок будет соблюден.
Ответ №1:
Если вы хотите, чтобы агрегат сортировал входные значения, вам, возможно, придется написать функцию изменения состояния, чтобы она собирала только входные данные и выполняла сортировку в конечной функции. Для этого может потребоваться много памяти, если вы кэшируете данные для большой таблицы.
Основываясь на том, что делает ваша совокупность, вы можете найти лучшее решение, но вы не можете зависеть от определенного порядка значений.