📁 Блок: SQL / MySQL / Оконные функции⏱️ Время изучения: ~90 мин🎯 Сложность: Продвинутая
⚡ Минимум для запоминания
SUM(col) OVER (...) — сумма по окну.
AVG(col) OVER (...) — среднее по окну.
MIN(col) / MAX(col) OVER (...) — минимум и максимум.
COUNT(*) OVER (...) — число строк в окне.
ORDER BY внутри OVER включает накопление.
Общий синтаксис
-- Окно из всех строк
aggregate_function(expression) OVER () AS alias
-- Окно внутри группы
aggregate_function(expression) OVER (PARTITION BY column) AS alias
-- Накопительное окно по порядку
aggregate_function(expression) OVER (ORDER BY column) AS alias
-- Накопление внутри группы
aggregate_function(expression) OVER (
PARTITION BY column
ORDER BY column
) AS alias
Команды / операторы / функции
Функция
Назначение
Пример
SUM()
Сумма значений в окне
SUM(order_amount) OVER (PARTITION BY customer_id)
AVG()
Среднее значение в окне
AVG(order_amount) OVER (PARTITION BY customer_id ORDER BY order_date)
MIN()
Минимум в окне
MIN(unit_cost) OVER (PARTITION BY order_id)
MAX()
Максимум в окне
MAX(list_price) OVER ()
COUNT()
Количество строк или не-NULL значений
COUNT(*) OVER (PARTITION BY category)
OVER
Определяет окно строк для функции
OVER (PARTITION BY customer_id ORDER BY order_date)
Важные нюансы
COUNT(*) считает все строки окна, включая NULL.
COUNT(column) игнорирует NULL в конкретном столбце.
AVG и SUM игнорируют NULL-значения (строки при этом остаются).
Без ORDER BY в окне агрегат возвращает одно значение на всё окно/раздел.