Задать вопрос
@artemfisher

Как использовать оконные функции в Order By?

Добрый день!
В документации по PostgreSQL 15 написано:
Оконные функции разрешается использовать в запросе только в списке SELECT и предложении ORDER BY.


Не нашел примера в интернете. Прошу не путать с использованием ORDER BY в определении оконной функции, т.е. over(ORDER BY col) я знаю как, а должно быть что-то вроде:
SELECT sum(num) OVER w FROM my_table WINDOW w AS (PARTITION BY name) ORDER BY w
  • Вопрос задан
  • 54 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
Наполовину правильно.

С одной стороны, описание окна расположено в правильном месте - строго после HAVING clause (или того места, где бы оно находилось).

С другой стороны, написан какой-то бред. Что должно означать ORDER BY w? Сортировка по определению окна? Вы же сами приводите правильную цитату:

Оконные функции разрешается использовать в запросе только в списке SELECT и предложении ORDER BY.


Где же у вас, собственно говоря, функция?

Должно быть, ну, скажем, так:
SELECT sum(num) OVER w 
FROM my_table 
WINDOW w AS (PARTITION BY name) 
ORDER BY MAX(num) OVER w
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
AshBlade
@AshBlade
Просто хочу быть счастливым
Потому что сортировка происходит по названиям столбцов.

Что ты хочешь получить, указывая ORDER BY w, какая логическая операция должна быть произведена? w это не скаляр, который можно сравнить, а внутренняя машинерия.

Если хочешь по сумме этой отсортировать, то лучше так (добавить alias):

SELECT sum(num) AS num_sum OVER w FROM my_table WINDOW w AS (PARTITION BY name) ORDER BY num_sum;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы