Оконная функция (window function) в SQL – это мощный инструмент для анализа данных, который позволяет выполнять вычисления на подмножестве строк (окно) внутри результирующего набора строк, обычно на основе определенного порядка сортировки. Оконные функции выполняются в контексте каждой строки результирующего набора и могут использоваться для выполнения агрегаций, аналитических и статистических вычислений, ранжирования данных и других аналитических задач. Основное отличие оконных функций от агрегатных функций с группировкой заключается в том, что оконные функции сохраняют индивидуальные строки в результирующем наборе и позволяют выполнять вычисления на каждой строке независимо.
Вот некоторые особенности оконных функций и их отличия от агрегатных функций с группировкой:
- Обработка индивидуальных строк:
- Оконные функции работают с каждой строкой результирующего набора независимо. Каждой строке может быть применена функция на основе определенного окна строк, заданного порядком сортировки и фильтрацией.
- Агрегатные функции с группировкой выполняют вычисления на группах строк, объединенных по определенным критериям (группировке).
- Окно строк:
- Для оконных функций важен порядок сортировки и определенное окно строк, в котором выполняются вычисления. Это позволяет, например, находить “текущую строку” и опираться на предыдущие и последующие строки в окне.
- В агрегатных функциях с группировкой данные обычно сгруппированы и вычисляются для каждой группы в отдельности без учета порядка сортировки.
- Результат на каждой строке:
- Оконные функции возвращают результат для каждой строки результирующего набора, расположенной в заданном окне. Результаты могут различаться для разных строк.
- Агрегатные функции с группировкой возвращают единый результат для каждой группы строк, объединенных по определенным критериям.
Примеры оконных функций включают в себя функции, такие как ROW_NUMBER()
, RANK()
, DENSE_RANK()
, LAG()
, LEAD()
, SUM() OVER()
, AVG() OVER()
, MAX() OVER()
, MIN() OVER()
и многие другие. Эти функции позволяют выполнять анализ данных на основе контекста каждой строки и анализировать тенденции и паттерны в данных, сохраняя при этом индивидуальные строки в результирующем наборе.