ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
Отличие от GROUP BY
Представьте, что у вас есть таблица с сотрудниками: имя, отдел и зарплата.
GROUP BY — это когда вы говорите: "Сгруппируй всех сотрудников по отделам и покажи мне только общую информацию по каждому отделу — среднюю зарплату, сумму зарплат и количество человек". В результате вы получите компактную табличку: одна строка на отдел с итогами. Все детали о каждом конкретном сотруднике исчезнут. Вы видите только общую картину, как будто смотрите на отчет свысока.
Оконные функции — это совершенно другой подход. Вы говорите: "Я хочу увидеть ВСЕХ сотрудников списком, но в дополнение к их имени и зарплате, посчитай и покажи рядом в отдельном столбце среднюю зарплату по их отделу". В результате вы получаете полный список всех сотрудников, и у каждого в строке есть его личные данные плюс новый столбец с аналитикой. Вы не теряете ни одной детали, но при этом получаете сводную информацию.
GROUP BY уменьшает количество строк в результате, оставляя только группы. Оконные функции сохраняют все строки, но добавляют к ним новые вычисляемые поля.
Функции агрегации оконных выражений
1. Агрегирующие функции
Выполняют стандартные агрегатные операции, но в рамках окна.
· SUM() - Сумма значений.
· AVG() - Среднее арифметическое.
· COUNT() - Количество строк.
· MIN() - Минимальное значение.
· MAX() - Максимальное значение.
2. Функции ранжирования
Присваивают порядковый номер или ранг строке в рамках её раздела.
· ROW_NUMBER() - Присваивает уникальный номер каждой строке.
· RANK() - Присваивает ранг с пропусками (при одинаковых значениях ранг совпадает, а следующий пропускается).
· DENSE_RANK() - Присваивает ранг без пропусков.
· NTILE(n) - Разбивает строки на n примерно равных групп (бакетов).
3. Функции смещения (доступа к соседним строкам)
Позволяют обращаться к данным из других строк в том же окне.
· LAG(column, offset) - Возвращает значение из строки, находящейся на offset строк назад.
· LEAD(column, offset) - Возвращает значение из строки, находящейся на offset строк вперёд.
· FIRST_VALUE(column) - Возвращает первое значение в окне.
· LAST_VALUE(column) - Возвращает последнее значение в окне.
4. Аналитические функции
Выполняют статистический анализ.
· CUME_DIST() - Вычисляет cumulative distribution (относительное положение) значения.
· PERCENT_RANK() - Вычисляет относительный ранг строки в рамках окна.
❤️ Что такое CTE?
CTE (Common Table Expression) — это временный именованный результат запроса, который существует только в течение выполнения основного запроса.
Основные характеристики CTE:
· Временность: Результат CTE не сохраняется в базе данных и доступен только для одного последующего оператора SELECT, INSERT, UPDATE, DELETE или MERGE.
· Улучшение читаемости: Позволяет разбивать сложные запросы на более простые и понятные логические блоки.
· Рекурсия: Поддерживает рекурсивные запросы (с помощью WITH RECURSIVE), что полезно для работы с иерархическими данными (например, деревьями).
· Синтаксис: Определяется с помощью ключевого слова WITH.
Простая структура:
WITH название_cte AS (
-- Здесь ваш подзапрос
SELECT ...
)
-- Основной запрос, использующий CTE
SELECT * FROM название_cte;
Скажите, нужен ли такой пост про PySpark или Python?
#найм_IT #развитие