вторник, 30 апреля 2024 г.

Some features of window functions

Определение окна может быть сохранено для повторного использования так:
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

Комментариев нет:

Отправить комментарий