Текст площадки «Stepik». Упомянутые цены и обещанные результаты могут быть неактуальны; условия покупки проверяйте у продавца.
Оконные функции MySQL с нуля: ROW_NUMBER, RANK, LAG и LEAD, SUM() OVER, рамки окна и процентили. 173 интерактивные задачи с автопроверкой на банковских данных. Научитесь решать топ-N по группам, нарастающие итоги и сравнение периодов — и уверенно отвечать на собеседовании.
Читать полное описание
Перестань группировать — начни анализировать
GROUP BY схлопывает строки. Оконные функции — нет. Вы получаете и детализацию, и агрегат в одном запросе. Это тот навык, который отделяет junior-аналитика от middle.
Курс проведёт вас от первого OVER() до процентилей и рамок окна — на живых банковских данных, а не на абстрактных таблицах.
173
SQL-задачи
с автопроверкой
129
теста на
понимание
45
уроков
8
модулей
Одна задача, два мира
«Посчитай нарастающий итог платежей по каждому полису». Вот как это решается без оконных функций — коррелированным подзапросом:
SELECT p.policy_id, p.amount,
(SELECT SUM(p2.amount) FROM payments p2
WHERE p2.policy_id = p.policy_id
AND p2.pay_date <= p.pay_date) AS running_total
FROM payments p;
А вот то же самое с ними:
SELECT policy_id, amount,
SUM(amount) OVER (PARTITION BY policy_id ORDER BY pay_date) AS running_total
FROM payments;
Короче, быстрее и читается как обычное предложение. Весь курс — про то, чтобы вы видели такие решения сразу.
Как растёт сложность
Введение
уровень 1
Ранжирование
уровень 1–2
Агрегаты
уровень 1–2
Смещение
уровень 2
Рамки окна
уровень 2–3
Продвинутые
уровень 3
Финальный проект
уровень 3
От «одна функция, одна таблица» до «несколько окон, CTE и JOIN в одном аналитическом отчёте».
Что внутри
Все функции стандарта, а не три популярныеROW_NUMBER, RANK, DENSE_RANK, NTILE · SUM/AVG/COUNT/MIN/MAX OVER · LAG, LEAD, FIRST_VALUE, LAST_VALUE, NTH_VALUE · CUME_DIST, PERCENT_RANK · ROWS BETWEEN и RANGE BETWEEN.
Рамки окна — целый модульМесто, где ломаются почти все самоучки. Почему LAST_VALUE возвращает не то, что вы ждёте, чем RANGE отличается от ROWS и что такое рамка по умолчанию.
Задачи как вопросы бизнеса«Кто лучший агент в каждом филиале?», «Как растут продажи от месяца к месяцу?», «Какие клиенты дают 80% выручки?» — вы идёте от вопроса к запросу, а не наоборот.
65% времени — практика173 задачи с автоматической проверкой. Теория даётся ровно в том объёме, который нужен, чтобы решить следующую задачу.
Программа
Датасет — знакомство с банковской базой из 9 таблиц
Введение — чем OVER() отличается от GROUP BY, синтаксис окна, PARTITION BY
Ранжирование — ROW_NUMBER, RANK, DENSE_RANK, NTILE. Топ-N по группам, дедупликация, квартили
Агрегатные окна — нарастающие итоги, доля от общего, скользящие средние
Функции смещения — LAG, LEAD, FIRST_VALUE, LAST_VALUE. Сравнение периодов и дельты
Рамки окна — ROWS BETWEEN, RANGE BETWEEN, точный контроль диапазона
Продвинутые техники — CUME_DIST, PERCENT_RANK, окна внутри CTE, ABC-анализ
Финальный проект — сквозной аналитический отчёт, как в реальной работе
На чём тренируемся
Аналитический отдел банка, который продаёт страховые продукты через сеть филиалов: клиенты, полисы, агенты, платежи, заявки на выплату, история статусов. Девять связанных таблиц.
Это не случайный выбор: страхование — область с естественными временными рядами и рейтингами. Продажи по месяцам, лучшие агенты, динамика выплат — ровно те задачи, ради которых оконные функции и придумали.
Нужен уверенный базовый SQL
Вы должны свободно писать SELECT с WHERE, соединять таблицы через JOIN, группировать через GROUP BY с HAVING и понимать подзапросы. Если это пока не так — сначала пройдите наш курс «SQL в MySQL: от нуля до оконных функций», он готовит ровно к этому.