0Pricing
SQL Academy · Урок

Накопительные итоги и скользящие средние

Вычисляйте накопительные суммы и скользящие средние с помощью SUM(...) OVER (ORDER BY ... ROWS BETWEEN ...)

«Накопительные итоги и скользящие средние» — бесплатный урок SQL Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.

Основы накопительного итога

Накопительный итог — это SUM с ORDER BY в окне без указания рамки, поэтому рамка по умолчанию — «от начала до текущей строки»:

SELECT day, revenue,
       SUM(revenue) OVER (ORDER BY day) AS running_total
FROM daily_revenue
ORDER BY day;

Накопительный итог по группе

Сбрасывайте накопительный итог для каждого пользователя:

SELECT id, user_id, total,
       SUM(total) OVER (
         PARTITION BY user_id ORDER BY created_at
       ) AS user_running_total
FROM orders;

Скользящее среднее

Скользящее среднее за N дней использует рамку ROWS:

SELECT day, revenue,
       AVG(revenue) OVER (
         ORDER BY day
         ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
       ) AS avg_7d
FROM daily_revenue;

Центрированное скользящее среднее

Центрированное окно за 7 дней (3 дня до текущего, текущий день и 3 дня после):

SELECT day, revenue,
       AVG(revenue) OVER (
         ORDER BY day
         ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING
       ) AS avg_7d_centred
FROM daily_revenue;

Накопительное распределение

Какую долю общей выручки мы достигли к каждому дню?

SELECT day, revenue,
       SUM(revenue) OVER (ORDER BY day)
         / SUM(revenue) OVER ()  AS cum_share
FROM daily_revenue;

ROWS и RANGE

  • ROWS — считает строки физически (N строк до или после)
  • RANGE — охватывает значения логически (например, 7 дней на основе значения даты)
-- ROWS: 6 previous rows + this one (may skip dates with no data)
AVG(revenue) OVER (ORDER BY day ROWS BETWEEN 6 PRECEDING AND CURRENT ROW)

-- RANGE: include any row with a day within '6 days' of the current row
AVG(revenue) OVER (ORDER BY day RANGE BETWEEN INTERVAL '6 days' PRECEDING AND CURRENT ROW)

Накопительный максимум

Лучший результат на текущий момент:

SELECT day, total_users,
       MAX(total_users) OVER (ORDER BY day) AS peak_so_far
FROM daily_metrics;

Накопительный счётчик

Общее количество событий, встретившихся до этой строки:

SELECT id, ts,
       COUNT(*) OVER (ORDER BY ts) AS events_so_far
FROM events;

Выявление аномалий

Сравните выручку за сегодня со скользящей базовой величиной:

SELECT day, revenue, avg_7d,
  CASE WHEN revenue < 0.5 * avg_7d THEN 'WARNING' ELSE 'OK' END AS status
FROM (
  SELECT day, revenue,
         AVG(revenue) OVER (ORDER BY day ROWS BETWEEN 7 PRECEDING AND 1 PRECEDING) AS avg_7d
  FROM daily_revenue
) sub;

Начальные значения NULL

При окне из 7 строк первые 6 строк имеют значения NULL или частичные средние. Решите, следует ли скрывать их или считать частичные окна допустимыми.

Производительность

Для накопительных агрегатов нужны входные данные, упорядоченные внутри секции. Индекс по столбцу из ORDER BY позволяет избежать сортировки.

Итоги

Рамки позволяют выполнять накопительные вычисления.

  • Рамка по умолчанию с ORDER BY = «от начала до текущей строки»
  • ROWS BETWEEN n PRECEDING AND CURRENT ROW = скользящее окно
  • SUM/AVG/MAX по окнам = накопительные или скользящие значения

Быстрая проверка

Какая рамка задаёт скользящее среднее за 7 дней до текущей строки?

Часто задаваемые вопросы

Урок «Накопительные итоги и скользящие средние» бесплатный?

Да — полный текст урока «Накопительные итоги и скользящие средние» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.

Чему я научусь в уроке «Накопительные итоги и скользящие средние»?

Вычисляйте накопительные суммы и скользящие средние с помощью SUM(...) OVER (ORDER BY ... ROWS BETWEEN ...) Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать SQL Academy?

Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Накопительные итоги и скользящие средние»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке SQL Academy?

Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. OVER, PARTITION BY, ORDER BY
  2. ROW_NUMBER, RANK, DENSE_RANK
  3. LAG, LEAD и шаблоны временных рядов
  4. Накопительные итоги и скользящие средние
← Назад к SQL Academy