Что такое оконные функции и какие кейсы ими решают?
1️⃣ Как кратко ответить
Оконные функции в SQL позволяют выполнять вычисления по набору строк, связанных с текущей строкой, без группировки данных. Они используются для решения задач, таких как вычисление скользящих средних, ранжирование данных, вычисление кумулятивных сумм и других аналитических операций.
2️⃣ Подробное объяснение темы
Оконные функции — это мощный инструмент в SQL, который позволяет выполнять сложные аналитические операции над данными. Они отличаются от агрегатных функций тем, что не группируют строки в одну, а позволяют выполнять вычисления по каждой строке в контексте набора строк, называемого "окном".
Основные компоненты оконных функций
- Функция: Это может быть любая из встроенных функций, таких как
SUM(),AVG(),ROW_NUMBER(),RANK(),LEAD(),LAG()и другие. - OVER(): Ключевое слово, которое определяет окно строк, к которым применяется функция.
- PARTITION BY: Опциональная часть, которая разделяет набор данных на части, к каждой из которых применяется оконная функция.
- ORDER BY: Определяет порядок строк в каждом разделе окна.
Пример использования оконной функции
Рассмотрим таблицу sales, содержащую данные о продажах:
| id | product | amount | sale_date |
|---|---|---|---|
| 1 | A | 100 | 2023-01-01 |
| 2 | B | 150 | 2023-01-02 |
| 3 | A | 200 | 2023-01-03 |
| 4 | B | 250 | 2023-01-04 |
Задача: Вычислить кумулятивную сумму продаж для каждого продукта.
SELECT
id,
product,
amount,
SUM(amount) OVER (PARTITION BY product ORDER BY sale_date) AS cumulative_sum
FROM
sales;
Объяснение кода:
SELECT id, product, amount: Выбираем столбцыid,productиamountиз таблицыsales.SUM(amount) OVER (...) AS cumulative_sum: Используем оконную функциюSUM()для вычисления кумулятивной суммы.PARTITION BY product: Разделяем данные по продуктам, чтобы кумулятивная сумма считалась отдельно для каждого продукта.ORDER BY sale_date: Определяем порядок строк по дате продажи, чтобы сумма накапливалась в хронологическом порядке.
Применение оконных функций
- Скользящие средние: Вычисление среднего значения по определенному количеству предыдущих строк.
- Ранжирование данных: Присвоение рангов строкам в наборе данных.
- Кумулятивные суммы: Накопление суммы значений по строкам.
- Сравнение строк: Использование функций
LEAD()иLAG()для сравнения значений соседних строк.
Оконные функции позволяют выполнять сложные аналитические задачи, не прибегая к подзапросам или временным таблицам, что делает их незаменимыми в анализе данных.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться