Оконные функции — это функции, применяемые к набору строк, связанных с текущей строкой. В отличие от GROUP BY, они не сворачивают строки, а добавляют значение в каждую строку результата. Базовый синтаксис: FUNCTION() OVER (PARTITION BY ... ORDER BY ...).
ROW_NUMBER даёт уникальный номер каждой строке (1, 2, 3, 4). RANK даёт одинаковый ранг для равных значений и пропускает следующий (1, 2, 2, 4). DENSE_RANK не пропускает (1, 2, 2, 3).
LAG берёт значение из предыдущей строки, LEAD — из следующей. Используются для расчёта изменений (выручка месяц-к-месяцу), retention (был ли юзер активен в прошлом периоде), сессионизации.
PARTITION BY разбивает данные на группы для применения оконной функции. Например, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY created_at) даст порядковый номер заказа внутри каждого пользователя.
Агрегации · JOIN-запросы · CTE (Common Table Expressions) · Подзапросы · Работа с датами · Строковые функции · Условная логика · Retention-анализ
Открыть весь SQL-тренажёр (325 задач) →