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

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

📁 Блок: SQL / MySQL / Оконные функции ⏱️ Время изучения: ~60 мин 🎯 Сложность: Повторение

⚡ Минимум для запоминания

  • SUM(col) OVER (...) — сумма по окну.
  • AVG(col) OVER (...) — среднее по окну.
  • MIN(col) / MAX(col) OVER (...) — минимум и максимум.
  • COUNT(*) OVER (...) — число строк в окне.
  • ORDER BY внутри OVER включает накопление.
  • GROUP BY сворачивает строки; окно — нет.

Общий синтаксис

-- Окно из всех строк
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(quantity * unit_cost) OVER (PARTITION BY order_id)
AVG() Среднее значение в окне AVG(unit_cost) OVER (PARTITION BY order_id)
MIN() Минимум в окне MIN(unit_cost) OVER (PARTITION BY order_id)
MAX() Максимум в окне MAX(unit_cost) OVER (PARTITION BY order_id)
COUNT() Количество строк или не-NULL значений COUNT(*) OVER (PARTITION BY date_received, posted_to_inventory)
OVER Определяет окно строк для функции OVER (PARTITION BY order_id ORDER BY date_received)
PARTITION BY Разделяет строки на группы PARTITION BY product_id
ORDER BY Задаёт порядок строк внутри окна ORDER BY date_received
GROUP BY Сворачивает строки в одну на группу GROUP BY order_id
DISTINCT Убирает дублирующиеся строки результата SELECT DISTINCT order_id, ...

Важные нюансы

  • COUNT(*) считает все строки окна, включая NULL.
  • COUNT(column) игнорирует NULL в конкретном столбце.
  • AVG и SUM игнорируют NULL-значения (строки при этом остаются).
  • Без ORDER BY в окне агрегат возвращает одно значение на всё окно/раздел.
  • С ORDER BY агрегат накапливается от начала до текущей строки.

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

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