SELECT *,
ROW_NUMBER() OVER my_window,
RANK() OVER my_window,
DENSE_RANK() OVER my_window
FROM online_store.orders
WINDOW my_window AS (ORDER BY revenue);
-- конструкцию WINDOW указывают после оператора WHERE и до оператора ORDER BY
Можно записать сразу несколько определений окна
WHERE ...
WINDOW my_window AS (ORDER BY revenue),
one_more_window AS (PARTITION BY user_id)
ORDER BY ...
Что нельзя:У оконных функций есть ограничения, которые нужно учитывать.
- использовать DISTINCT в аргументе оконной функции, например COUNT(DISTINCT поле)
- оконные функции нельзя сочетать с группировкой GROUP BY
- оконные функции нельзя использовать в условиях после WHERE, как и агрегирующие функции (Вычисление агрегирующих и оконных функций происходит после срезов)
однако такие запросы сработают
SELECT DISTINCT
event_dt,
COUNT(*) OVER (PARTITION BY event_dt)
FROM online_store.orders;
-- Похожую итоговую таблицу выдаст запрос с GROUP BY
SELECT DISTINCT
event_dt,
COUNT(*)
FROM online_store.orders
GROUP BY event_dt;
полный список оконных функций - https://postgrespro.ru/docs/postgrespro/12/functions-window
Комментариев нет:
Отправить комментарий