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

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

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

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

  • MIN(col) / MAX(col) / AVG(col) OVER (PARTITION BY ...).
  • SUM(col) OVER (PARTITION BY ...) — сумма по группе.
  • SUM(col) OVER (ORDER BY ...) — кумулятивная сумма.
  • SUM(col) OVER (PARTITION BY ... ORDER BY ...) — кумулятивная сумма в группе.
  • COUNT(*) / COUNT(col) OVER (...) — количество строк или не-NULL значений.

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

-- Агрегат по группе
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

-- Уникальные строки результата оконной функции
SELECT DISTINCT
    column,
    aggregate_function(expression) OVER (PARTITION BY column)
FROM table_name;

Команды / операторы / функции

ФункцияНазначениеПример
SUM() Сумма значений в окне SUM(quantity * unit_price) OVER (PARTITION BY order_id)
AVG() Среднее значение в окне AVG(unit_price) OVER (PARTITION BY order_id)
MIN() Минимум в окне MIN(unit_price) OVER (PARTITION BY order_id)
MAX() Максимум в окне MAX(unit_price) OVER (PARTITION BY order_id)
COUNT() Количество строк или не-NULL значений COUNT(product_id) OVER (PARTITION BY order_id, status_id)
OVER Определяет окно строк для функции OVER (PARTITION BY product_id ORDER BY date_received)
DISTINCT Убирает дублирующиеся строки результата SELECT DISTINCT order_id, MIN(unit_price) OVER (...)

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

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

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

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