Курсы · бесплатно, без регистрации
Продвинутый SQL: оконные функции, сессии и метрики — курс с проверкой задач
Курс SQL для аналитика, который уже пишет JOIN и GROUP BY: 51 урок и 154 задачи на базе авиакомпании с журналом событий приложения. Оконные функции и рамки, серии и сессии, JSON, история изменений, качество данных, продуктовые метрики и эксперименты — бесплатно и без регистрации.
- 16 модулей, 51 урок
- 154 задачи с проверкой
- 14 таблиц, 4,1 млн строк
- синтаксис PostgreSQL
Оконная функция за десять секунд
Это база курса: рейсы, бронирования, программа лояльности и журнал событий приложения. Запустите готовый запрос или поменяйте его.
Как устроен урок
- 01
Идея
Короткое объяснение одной конструкции и пример, который можно запустить на той же базе.
- 02
Разбор
Готовый запрос построчно: что делает каждая строка и что изменится, если её поменять.
- 03
Три задачи
Разминка, основная и со звёздочкой. Подсказок с каждой задачей меньше, подсказка в две ступени — по запросу.
- 04
Проверка
Сервер выполняет запрос и сверяет результат с эталоном. Если не сошлось, видно, чем именно: столбцы, строки или значения.
Программа курса
Модули можно проходить не подряд: каждый урок открывается по ссылке, а нужные приёмы из прошлых уроков названы в тексте.
Окна, даты и соединения
Ранги и топ-N, доли и накопление, соседние строки, ряды дат без пропусков и местное время, соединение таблицы с собой, FULL JOIN и рекурсия.
Модуль 1
Оконные функции: нумерация и ранги
Агрегат рядом с каждой строкой, места и ничьи, топ-N в группе и удаление дублей
Что будете уметь: Сравнивать строку со средним и размером её группы, не теряя строк; нумеровать и ранжировать строки внутри групп; выбирать топ-N в каждой группе и оставлять последнюю запись по ключу.
Модуль 2
Оконные функции: доли, накопление, соседи
Доля от итога, накопительный итог и скользящее среднее, сравнение с предыдущей и следующей строкой через LAG и LEAD
Что будете уметь: Считать долю строки в общем итоге и в своей группе, строить накопительные итоги и сглаживать ряд средним за 7 дней, сравнивать период с прошлым и находить интервал до следующего события.
Модуль 3
Даты без пропусков
Календарь без дыр через generate_series, сетка «день × объект» через CROSS JOIN, недели и разница в днях, неполные периоды на краю данных и местное время
Что будете уметь: Строить ряды дат и часов, где пустой день — ноль, а не пропуск, и сетки, где на месте каждая пара «день × объект»; считать дни между датами и сравнивать периоды честно, не путая обрыв данных с падением; переводить московское время в местное по часовому поясу аэропорта.
Модуль 4
Сложные соединения и рекурсия
Таблица, соединённая сама с собой, сверка двух наборов через FULL JOIN и рекурсивный обход маршрутной сети
Что будете уметь: Находить пары строк внутри одной таблицы без двойного счёта, сверять два набора через FULL JOIN и находить пустые клетки сетки, обходить сеть рекурсивным запросом с ограничением глубины и защитой от циклов.
Последовательности и структура
Рамки окон и перцентили, серии и острова, сессии и пути пользователя, сложная агрегация, JSON и массивы.
Модуль 5
Рамки окон и перцентили
ROWS, RANGE и GROUPS, первое и последнее значение окна, квантильные группы, медиана и перцентили по группам
Что будете уметь: Выбирать рамку окна под вопрос — строки, календарные дни или группы равных значений; брать значение первой, последней и n-й строки окна без ловушки рамки по умолчанию; делить строки на квантильные группы; считать медиану и перцентили по группам и видеть, когда средняя вводит в заблуждение.
Модуль 6
Серии и острова
Серии дней подряд через разность даты и номера строки, паузы и возвращения через LAG, периоды сбоя по часам и склейка пересекающихся интервалов
Что будете уметь: Находить серии подряд идущих дней, их начало, конец и длину, самую длинную серию на человека; измерять паузы между активностями и поездками и находить возвращения после перерыва; собирать периоды, когда выполнялось условие, и сравнивать метрики внутри и вне их; склеивать пересекающиеся интервалы в непрерывные периоды.
Модуль 7
Сессии и пути
Нарезка журнала событий на сессии, источник сессии из свойств события, первое и последнее касание перед покупкой, соседние шаги, воронка внутри сессии и строка пути
Что будете уметь: Делить события клиента на сессии по паузе и считать их длительность и глубину; поднимать свойство события на уровень сессии и решать, что делать с сессиями без источника; находить первое и последнее касание перед покупкой и видеть, как итог зависит от модели атрибуции; смотреть, что было до и после шага, строить воронку внутри сессии и находить самые частые пути.
Модуль 8
Сложная агрегация
Подытоги в одном запросе, развороты строк в столбцы и обратно, склейка значений, массивы и логические флаги
Что будете уметь: Строить отчёты с подытогами и общим итогом и отличать итог от NULL в данных; разворачивать метрики в столбцы и собирать столбцы обратно в строки переносимым SQL; склеивать значения группы в строку в нужном порядке, считать уникальные сочетания столбцов и отвечать на вопросы «все ли» и «хоть один».
Модуль 9
JSON и массивы
Поля из JSON-свойств событий, числа и даты из текста, массивы в строки и соединение событий приложения с бронями и билетами
Что будете уметь: Доставать поля из JSON и приводить их к нужному типу, разворачивать массивы в строки и считать популярность элементов, соединять события с таблицами по ключу из JSON и по элементам массива и находить расхождения сумм — и знать, чем запись в DuckDB отличается от PostgreSQL.
Данные в работе
История изменений, качество данных, продуктовые метрики и эксперименты — так, как их считают в продакшене.
Модуль 10
История изменений
Интервалы действия записи и значение на момент, соединение событий с историей на их дату, сборка истории из дат изменений и проверка стыков
Что будете уметь: Находить значение, действовавшее в заданный момент, без двойного счёта на границе; приписывать событиям уровень и тариф на правильную дату, не теряя строк без истории и не размножая их на пересечениях; собирать интервалы из дат изменений через LEAD, находить пересечения и дыры и считать время на каждом значении.
Модуль 11
Качество данных
Дубли доставки и первая доставка, поздние события и окно дозревания, проверки-инварианты и сверка двух источников через FULL JOIN
Что будете уметь: Находить и убирать повторные доставки, не теряя настоящих повторов, воспроизводить отчёт «на момент» и определять, когда день можно закрыть, собирать паспорт качества из проверок и сверять приложение с учётной таблицей, описывая каждый дефект числами.
Модуль 12
Продуктовые метрики как в работе
DAU, WAU и MAU на каждый день и stickiness, retention когорт — классический, rolling и с поправкой на зрелость, LTV на одинаковом горизонте и движение выручки по клиентам
Что будете уметь: Считать активную аудиторию скользящими окнами без COUNT(DISTINCT) OVER, строить когорты с флагом на клиента и пустыми незрелыми клетками, сравнивать LTV когорт на одном горизонте и раскладывать изменение выручки на новых, растущих, сократившихся, ушедших и вернувшихся.
Модуль 13
Эксперименты в SQL
Проверка сплита до результата, эффект с доверительным интервалом и сегменты без подгонки — на двух A/B-тестах приложения
Что будете уметь: Проверять A/B-тест перед чтением: SRM хи-квадратом, единицу анализа и момент назначения; считать разницу конверсий, её стандартную ошибку, 95% интервал и z на переносимом SQL; разбирать эффект по сегментам с поправкой на множественные проверки и писать вывод с честными оговорками.
Задачи с собеседований
Классические задачи уровня middle с разбором.
Модуль 14
Задачи с собеседований
N-я величина и медиана вручную, последовательности и повторы, разбор падения метрики — как их дают на интервью аналитика
Что будете уметь: Решать типовые задачи собеседования уровня middle и отвечать на вопросы следом: вторая и N-я величина при ничьих, медиана без встроенной функции, возврат назавтра, серии подряд, повтор в течение N дней, удаление дублей, изменение неделя к неделе, разложение падения по сегментам и неаддитивность уникальных.
Итоговые кейсы
Два кейса: продажи и посадка на базовых таблицах — и запуск одностраничного оформления на событиях приложения, эксперименте и программе лояльности, где проверка данных дважды меняет вывод.
Модуль 15
Итоговый кейс: продажи и посадка
Воронка от продажи до вылета, когорты броней с флагом и поправкой на зрелость, продажи на одинаковом горизонте и записка руководителю с проверкой данных
Что будете уметь: Собирать из окон, дат и соединений ответ на рабочий вопрос — воронку, когорты с флагом на объект, сравнение на одинаковом горизонте и сводную по вариантам — и проверять, не держится ли вывод на срезе или особенности выгрузки.
Модуль 16
Итоговый кейс: одностраничное оформление
Воронка оформления по сессиям, сбой платёжного шлюза в период теста, сплит и выручка через сверку с бронями, интервал для разницы средних и покупки в других каналах — записка о запуске с проверкой данных
Что будете уметь: Достраивать запросы из знакомых шагов — сессии, острова, JSON, история изменений, проверки качества — до ответа на вопрос о запуске: считать эффект теста с интервалом и проверять, что на самом деле измеряет метрика, прежде чем писать вывод.
Примеры задач
Формулировки — из самого курса: от первого ранга до задачи с собеседования.
- Оконные функции: нумерация и ранги · ROW_NUMBER, RANK и DENSE_RANK: места и ничьиПронумеруй модели самолётов по дальности: самой дальней — 1, следующей — 2 и так далее. Столбцы:
model,range,place. Отсортируй поplace.Открыть урок - Серии и острова · Серии подряд: дата минус номер строкиНайди все серии дней подряд, в которые участник 159 открывал приложение (событие
app_open). Для каждой серии выведи первый деньfirst_day, последний деньlast_dayи число днейstreak_days. Отсортируй поfirst_day.Открыть урок - Сессии и пути · Сессии: пауза больше 30 минутСобытия клиента
01ba9e252b44уже нарезаны на сессии в шаге numbered: правило 30 минут, дубли доставки убраны, у каждого события — номер его сессииsession_no. Сверни события в сессии: для каждой выведиsession_no,started— время первого события,seconds— длительность сессии в секундах, от первого события до последнего, иevents— число событий. Отсортируй поsession_no.Открыть урок - Задачи с собеседований · N-й по величине и медианаКлассика собеседований — вторая по величине цена. Для каждого класса обслуживания найди самый высокий тариф, действующий на момент среза, и вторую цену — самую высокую, которая строго меньше максимальной. Попробуй через MAX и условие «меньше максимума», без LIMIT, OFFSET и окон: проверка смотрит только на результат, способ — на твоей совести. Столбцы:
fare_conditions,max_price,second_price. Отсортируй поfare_conditions.Открыть урок
Кому подойдёт и что нужно знать заранее
Курс для тех, кто уверенно пишет SELECT, JOIN, GROUP BY и подзапросы и упирается в задачи посложнее: «первая покупка каждого клиента», «сколько дней подряд», «удержание по когортам», «значим ли результат теста». Если эти темы ещё не знакомы, начните с курса «SQL с нуля».
Данные здесь ведут себя как рабочие: события приходят с опозданием и дублями, суммы в одном релизе записаны в копейках, у части клиентов две действующие записи истории. Поэтому половина уроков не про синтаксис, а про то, как не получить правдоподобный неверный ответ.
Каждая конструкция разобрана и отдельной статьёй — например, оконные функции, рамка окна и сессии. Курс отличается тем, что после объяснения запрос пишете вы, и сервер проверяет результат.
Что дальше
Частые вопросы
Курс бесплатный?
Да. Сейчас открыты все 51 урок и 154 задачи — без оплаты и без регистрации. Аккаунт нужен только затем, чтобы прогресс сохранялся между устройствами.
Что нужно знать до начала?
SELECT и WHERE, агрегаты и GROUP BY, JOIN, CASE и подзапросы — то, чему учит курс «SQL с нуля». Оконные функции знать не обязательно: с них курс начинается.
Чем курс отличается от «SQL с нуля»?
Темами и данными. «SQL с нуля» доводит до JOIN и подзапросов на восьми таблицах. Здесь 14 таблиц, включая журнал событий приложения на полтора миллиона строк, а темы — оконные функции, серии, сессии, JSON, история изменений, метрики и эксперименты.
Поможет ли курс подготовиться к собеседованию?
Да, для этого есть отдельный модуль «Задачи с собеседований»: N-й по величине и медиана без встроенных функций, последовательности, поиск аномалии и объяснение падения метрики. Два итоговых кейса проверяют всё вместе на задаче без подсказок.
Какой диалект SQL в курсе?
Курс учит SQL, который работает в PostgreSQL. Запросы выполняет DuckDB; там, где базы расходятся (JSON и массивы, деление целых, функции дат), урок называет обе записи, а проверка предупреждает, если запрос не сработает в PostgreSQL.
Выдаётся ли сертификат?
Нет. Курс не выдаёт сертификатов и документов об образовании.
Что делать после курса?
Симулятор SQL-аналитика: сюжетный курс, где запросы пишут в ответ на вопросы команды, а в конце — записка менеджеру с выводами.