Описание тега window-functions

Оконная функция - это тип операции SQL, которая агрегирует по разделу набора результатов.

В качестве основного примера оконной функции рассмотрим таблицу, содержащую список лиц с указанием их возраста и пола.
Если вы хотите, чтобы запрос возвращал полный список людей с указанием их возрастного ранга по полу, вы могли бы сделать это проще всего, используя функцию окна ранжирования.
Такую функцию можно использовать для ранжирования отдельных строк в подмножестве результатов.

При использовании оконной функции вышеуказанная функция будет выглядеть так:

SELECT name, 
       age, 
       gender, 
       RANK() OVER (PARTITION BY gender ORDER BY age DESC) AS age_rank
FROM persons

Оконные функции, определенные стандартом SQL, также могут обращаться к строкам до и после текущей строки с помощью lag() или lead()функция. Следующий запрос вычисляет дельту предыдущей строки для столбца суммы для каждого клиента:

SELECT customer_id,
       order_date,
       amount, 
       amount - lag(amount) over (partition by customer_id ORDER BY order_date) as delta
FROM order
ORDER BY customer_id, order_date;

Стандартные агрегаты (например, count(), sum()) также можно использовать как оконную функцию. В сочетании сORDER BY (внутри определения раздела) это будет генерировать "текущие" итоги на основе используемого агрегата.

Оконные функции доступны в широком спектре СУБД: Oracle (называемых здесь "аналитическими функциями"), Microsoft SQL Server, DB2 (называемыми здесь "функциями olap"), PostgreSQL, Teradata, Sybase, Vertica и частично в базе данных H2.