Оконные функции и методы построения аналитики с помощью SQL, ранжирование и сортировка
Оконные функции в SQL предоставляют мощные средства для выполнения аналитических задач, таких как ранжирование, сортировка и агрегация данных в пределах определенных окон (или групп). Они позволяют выполнять вычисления на наборе строк, которые связаны с текущей строкой, без необходимости использования подзапросов или объединений.
Основные концепции оконных функций
Оконные функции: Функции, которые выполняются над набором строк (окон) и возвращают результаты для каждой строки в этом окне. В отличие от обычных агрегатных функций, оконные функции не сгруппируют строки в одну итоговую строку, а возвращают результат для каждой строки в рамках окна.
Окно: Набор строк, которые определяются текущей строкой и заданными критериями (например, группировкой или порядком). Окно может быть задано с помощью ключевого слова
OVER
.Порядок строк: Оконные функции часто зависят от порядка строк в окне, который указывается с помощью
ORDER BY
в определении окна.
Синтаксис оконных функций
Оконные функции обычно имеют следующий синтаксис:
function_name
: Название оконной функции (например,ROW_NUMBER()
,RANK()
,SUM()
).expression
: Выражение для вычисления.PARTITION BY
: Определяет разделение данных на группы (окна).ORDER BY
: Определяет порядок строк в каждом окне.ROWS
: Определяет размер окна (опционально).
Примеры использования оконных функций
1. Ранжирование строк
ROW_NUMBER()
: Нумерует строки в пределах окна.В этом примере функция
ROW_NUMBER()
присваивает уникальный номер каждой строке в пределах отдела, упорядочивая их по зарплате в порядке убывания.RANK()
: Присваивает уникальные ранги строкам в пределах окна, допускает одинаковые ранги для строк с одинаковыми значениями.Здесь
RANK()
присваивает ранги строкам, позволяя иметь одинаковые ранги для сотрудников с одинаковой зарплатой.DENSE_RANK()
: Присваивает уникальные ранги строкам в пределах окна без пропуска рангов.DENSE_RANK()
также присваивает ранги строкам, но не пропускает ранги в случае равенства значений.
2. Аггрегация и суммирование
SUM()
: Вычисляет кумулятивную сумму значений в пределах окна.В этом примере
SUM()
вычисляет кумулятивную сумму зарплат в пределах каждого отдела, упорядочивая строки по зарплате.AVG()
: Вычисляет скользящее среднее значение в пределах окна.Здесь
AVG()
вычисляет скользящее среднее зарплат для каждой строки, учитывая две предыдущие строки в пределах отдела.
3. Минимум и максимум
MIN()
иMAX()
: Вычисляют минимальные и максимальные значения в пределах окна.Эти функции вычисляют минимальные и максимальные зарплаты для каждой строки в пределах отдела.
Практическое применение
Оконные функции часто используются для:
Отслеживания рангов и позиций: Например, для создания списка сотрудников по их рангу в отделе.
Анализа кумулятивных значений: Например, для вычисления кумулятивных продаж за определенный период.
Анализа скользящих средних: Например, для анализа трендов и прогнозов.
Сравнения данных в пределах окна: Например, для вычисления отклонений от средних значений.
Заключение
Оконные функции являются мощным инструментом для выполнения сложной аналитики в SQL. Они позволяют выполнять расчеты на уровне строк и предоставляют гибкость для анализа данных в рамках определенных окон. Понимание и использование оконных функций поможет вам выполнять более сложные запросы и получать более точные результаты аналитики.
Last updated