← К оглавлению занятия

🔖 Справочник: команды и синтаксис

📁 Блок: 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 в окне агрегат возвращает одно значение на всё окно/раздел.

Полный справочник

→ Справочник SQL