Нарастающий итог
Часть раздела Продвинутый уровень путешествия по SQL на Coddy — урок 25 из 27.
Нарастающий (кумулятивный) итог — это SUM над окном с ORDER BY: это превращает агрегатную функцию в ту, которая растет строка за строкой.
SELECT day, amount,
SUM(amount) OVER (ORDER BY day) AS running_total
FROM revenueБез ORDER BY окно охватывает все строки, и вы получите общий итог в каждой строке. С ним окно расширяется по одной строке за раз в этом порядке, поэтому каждая строка видит только себя и всё, что ей предшествует.
Добавьте PARTITION BY, чтобы сбросить нарастающий итог для каждой группы, например, нарастающий итог выручки по регионам день за днем.
Задание
ЛегкоДоступные таблицы и столбцы:
<strong>revenue</strong>:<strong>region</strong>,<strong>day</strong>,<strong>amount</strong>
Верните region, day, amount и region_running_total: накопительную сумму amount для этого региона до этого дня включительно. Накопительный итог должен сбрасываться для каждого региона.
Используйте PARTITION BY в оконной функции. Отсортируйте по region, затем по day.
Шпаргалка
Нарастающий (кумулятивный) итог использует SUM с ORDER BY в окне — окно расширяется строка за строкой в этом порядке:
SELECT day, amount,
SUM(amount) OVER (ORDER BY day) AS running_total
FROM revenueДобавьте PARTITION BY, чтобы сбрасывать нарастающий итог для каждой группы:
SELECT region, day, amount,
SUM(amount) OVER (PARTITION BY region ORDER BY day) AS region_running_total
FROM revenue
ORDER BY region, dayПопробуйте сами
SELECT region, day, amount,
-- SUM(amount) OVER (PARTITION BY region ORDER BY day)
FROM revenue
ORDER BY region, day
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Продвинутый уровень
6Рецепты аналитики
Топ-N в группеПроцент от общегоНарастающий итогОдна строка на ключИтоги — Лучшие клиенты