Оконные функции в SQL: что это и как использовать
Оконные функции в SQL: что это и как использовать
Рассказываем о пользе оконных функций в SQL и объясняем, как применять их в работе с данными. Описываем синтаксис и виды, приводим примеры функций.
Оконные функции в языке SQL полезны для проведения вычислений на основе строк таблицы. Они позволяют сделать запросы более простыми и читаемыми. Часто тот же результат можно получить и без использования оконных функций, но с ними запрос будет короче и будет оптимальнее выполняться. Такие функции помогают готовить аналитические отчёты, рассчитывать скользящие значения строк и вычислять разные модели атрибуции.
Суть оконных функций в SQL заключается в разделении запроса на части, или так называемые партиции, по определённым условиям. При этом каждая часть обрабатывается отдельно от других. Функция выдаёт отдельный результат для каждой строки, сохраняя его. Этим оконные функции отличаются от GROUP BY, где строки группируются.
Результаты вычислений оконных функций добавляются в качестве дополнительных строк
Также некоторые оконные функции могут использовать строки, которые не участвуют в выборке. К примеру, функция смещения в SQL позволяет брать данные из предыдущей или следующей строки окна.
Оконные функции позволяют анализировать имеющуюся информацию и получать дополнительную без изменения базовых данных. Их можно использовать в SQL для различных целей:
Научиться применять оконные функции поможет курс «SQL для работы с данными и аналитики». На занятиях студенты осваивают PostgreSQL, ClickHouse, DBeaver и DataLens, получают практический опыт и выполняют два проекта на реальных данных.
Написание оконных функций включает указание имени функции, её условий и спецификации. Спецификация в SQL ограничивает набор строк, которые будут участвовать в выполнении вычислений.
Шаблон написания оконной функции
Разбираемся, что означает каждый параметр SQL:
Также оконная функция SQL может включать необязательное условие:
Оконные функции в SQL делятся на четыре вида:
Возьмём для примера таблицу employee_sales с информацией о продажах, совершенных сотрудниками за последние несколько месяце. В ней есть следующие поля: employee_id, month, sales_amount. Нужно вычислить скользящее среднее продаж (moving_average_sales) за последние три месяца для каждого сотрудника (employee_id). Здесь поможет агрегатная оконная функция SQL.
SQL-запрос с оконной функцией, который определяет средние показатели продаж сотрудников за три месяца
Разберёмся, что значит каждый параметр в примере:
Как пример можно взять ту же таблицу с данными по продажам разных сотрудников и с помощью ранжирующей оконной функции определить, в какие месяцы каждый сотрудник добился максимальных результатов.
SQL-запрос, ранжирующий продажи сотрудников по месяцам
Значения параметров:
В этом случае для примера возьмём таблицу student_scores, которая содержит информацию о результатах экзаменов студентов. В ней есть такие поля: student_id, exam_date, score. С помощью аналитической оконной функции SQL можно вычислить кумулятивное распределение (cumulative_distribution) для каждого студента (student_id) по их результатам экзаменов (score).
Запрос, показывающий процент студентов, которые получили оценку ниже текущей или равную ей
Значения параметров:
Для примера используем таблицу stock_prices с данными о ценах акций на разные даты. В ней есть такие поля: stock_id, date, closing_price. Функция смещения поможет определить изменение цены акций (price_change) по сравнению с предыдущим днём для каждой акции (stock_id).
Запрос, показывающий динамику цен акций
Значения параметров:
Читать также: