Оконные функции
Оконные функции — функции, которые выполняют вычисления внутри заданного набора данных или "окна" в таблице БД.
Принцип работы
- Оконная функция (ОФ) определяет "окно" данных, на которых будет выполняться вычисление (несколько строк или диапазон значений столбца).
- Если требуется, данные внутри окна упорядочиваются по одному или нескольким столбцам.
- Применяются вычисления, заданные в ОФ (сумма, среднее значение, ранжирование и т.д.).
- Если требуется, результаты группируются по столбцам или выражениям.
- Возврат результатов.
Упрощенный синтаксис
<имя функции> OVER (<окно>)
где имя функции = имя оконной функции,
окно = выражение, описывающее набор строк для обработки и порядок обработки.
Характеристики
- В отличие от агрегатных функций, оконные могут вычислять значения для каждой строки в результате запроса. Агрегатные работают над всем набором данных.
- ОФ не уменьшают количество строк, а возвращают столько значений, сколько получили на вход.
- В отличие от
GROUP BY,OVERможет обращаться к другим строкам.
Как используются?
- Для определения порядка строк и их ранжирования в рамках группы данных.
- Например, можно выделить наиболее ранний или поздний заказ для каждого клиента.
- Применение фильтров к результирующему набору данных по условиям внутри функции.
- Для выполнения вычислений на группах данных без создания временных таблиц или подзапросов.
- Обращения к данным из других строк в пределах окна. Полезно для сравнения значений или расчета разницы между значениями.
Виды
- Агрегатные — вычисляют агрегированные значения по группам строк в окне.
- Пример: среднее значение или сумма всех значений в окне.
- Ранжирующие — назначают ранг каждой строке в пределах окна в соответствии с заданными критериями сортировки.
- Пример: можно ранжировать товары по их цене в каждой категории.
ROW_NUMBER— возвращает номер строки, используется для нумерации.RANK— возвращает ранг каждой строки.
- Смещения — позволяют перемещаться и обращаться к разным строкам в окне относительно текущей строки.
LAG— обращается к данным из предыдущих строк окна.LEAD— обращается к данным из следующих строк. АналогичноLAGимеет 3 аргумента.