OVER, PARTITION BY, ORDER BY
Разберитесь с моделью оконных функций: OVER, PARTITION BY группирует, ORDER BY сортирует, а GROUP BY работает иначе
«OVER, PARTITION BY, ORDER BY» — бесплатный урок SQL Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.
Что такое оконная функция?
Оконная функция вычисляет значение по набору строк, связанных с текущей строкой, — не сворачивая результат, как это делает GROUP BY. Вы сохраняете каждую строку и получаете столбец с агрегированным значением.
Базовый пример
Средняя сумма заказа по всей таблице, отображаемая в каждой строке:
SELECT id, total,
AVG(total) OVER () AS avg_total
FROM orders;Предложение OVER
Предложение OVER (...) определяет окно. Пустые скобки означают «весь результирующий набор».
SELECT id, total,
SUM(total) OVER () AS grand_total
FROM orders;PARTITION BY: группировка окна
Похоже на GROUP BY, но строки не сворачиваются:
SELECT id, user_id, total,
SUM(total) OVER (PARTITION BY user_id) AS user_total
FROM orders;
-- Every order keeps its row; user_total is the same for all of one user's orders.ORDER BY в окне
ORDER BY внутри OVER задаёт порядок строк для последовательных вычислений:
SELECT id, user_id, total,
SUM(total) OVER (PARTITION BY user_id ORDER BY created_at) AS running_total
FROM orders;
-- Running total per user, ordered by date.Окно и GROUP BY
Сравним рядом:
-- GROUP BY: 1 row per user
SELECT user_id, SUM(total) FROM orders GROUP BY user_id;
-- Window: 1 row per order, with user total alongside
SELECT id, user_id, total,
SUM(total) OVER (PARTITION BY user_id)
FROM orders;Своя рамка для каждой строки
«Рамка» — это набор строк внутри секции, которые рассматривает функция. Рамка по умолчанию при наличии ORDER BY — «от начала до текущей строки»; именно она обеспечивает накопительные итоги.
Именованные окна
Если несколько функций используют одно окно, задайте ему имя один раз:
SELECT id, user_id, total,
SUM(total) OVER w AS running_sum,
AVG(total) OVER w AS running_avg
FROM orders
WINDOW w AS (PARTITION BY user_id ORDER BY created_at);Большинство агрегатных функций работают как оконные
COUNT, SUM, AVG, MIN, MAX — все они могут использоваться в окне. Специализированные оконные функции включают ROW_NUMBER, RANK, LAG/LEAD, NTILE и другие.
Оконные функции выполняются после WHERE
Логический порядок: FROM → WHERE → GROUP BY → HAVING → window functions → SELECT → ORDER BY → LIMIT. Поэтому WHERE фильтрует строки до вычисления оконных функций.
Особенности производительности
Оконным функциям требуется сортировка (или хеширование). Для больших секций индекс по столбцам (partition, order) позволяет избежать этапа сортировки.
Итоги
Оконные функции добавляют агрегированные значения к каждой строке.
- OVER () = весь результат
- PARTITION BY = группировка окна
- ORDER BY в окне = включение последовательных вычислений
Быстрая проверка
Что вычисляет SUM(x) OVER (PARTITION BY user_id)?
Часто задаваемые вопросы
Урок «OVER, PARTITION BY, ORDER BY» бесплатный?
Да — полный текст урока «OVER, PARTITION BY, ORDER BY» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.
Чему я научусь в уроке «OVER, PARTITION BY, ORDER BY»?
Разберитесь с моделью оконных функций: OVER, PARTITION BY группирует, ORDER BY сортирует, а GROUP BY работает иначе Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать SQL Academy?
Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «OVER, PARTITION BY, ORDER BY»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке SQL Academy?
Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- OVER, PARTITION BY, ORDER BY
- ROW_NUMBER, RANK, DENSE_RANK
- LAG, LEAD и шаблоны временных рядов
- Накопительные итоги и скользящие средние