
Продвинутый SQL: сложные запросы и задачи для собеседований
Продолжение базового SQL: сложные JOIN, оконные рамки, временные ряды, retention, воронки и рекурсивные CTE. Разбирайте примеры и пишите запросы с автоматической проверкой — от отдельных расчётов до витрины интернет-магазина.
О курсе
Вы уже пишете SELECT, соединяете таблицы и считаете агрегаты. Следующий шаг — запросы, в которых нужно совместить несколько источников, учесть историю изменений и получить точный результат на неполных данных.
В этом курсе вы будете рассчитывать повторные покупки и удержание клиентов, выделять пользовательские сессии, строить последовательные воронки и находить ошибки в финансовых отчётах. Каждую тему разберём на таблицах: какие строки поступают на вход, что делает запрос и почему получается именно такой результат.
Что разберём
- Сложные соединения: дубли после JOIN, предварительная агрегация, EXISTS и выбор исторической записи на нужную дату.
- Оконные рамки ROWS и RANGE, скользящие показатели, календарь с пропущенными датами.
- Последовательности событий, сессии и пересекающиеся интервалы.
- Когорты, retention, воронки и RFM-сегментация.
- Рекурсивные CTE для деревьев и графов, проверки качества данных и сверка отчётов.
- Чтение планов выполнения SQLite, составные индексы и переписывание запросов с сохранением результата.
После разобранных примеров вы пишете собственные SQL-запросы. Автоматическая проверка использует несколько наборов данных, в том числе скрытые: решение должно учитывать пропуски, равные даты, дубли и пустые выборки.
В каждом модуле — отдельный кейс. В финальном блоке собраны тестовые задания по повторным покупкам, сессиям и финансовому отчёту. Итоговый проект — аналитическая витрина интернет-магазина.
Практика выполняется прямо в браузере на SQLite. Основные приёмы пригодятся и в других СУБД; функции дат и планы выполнения разбираются именно для SQLite.
Чему научитесь
- Соединять несколько источников и находить причины неверных сумм и дублей в результате.
- Выбирать оконные рамки, строить календарные ряды и рассчитывать скользящие показатели.
- Восстанавливать исторические значения, выделять сессии и объединять интервалы.
- Считать retention, последовательные воронки и RFM-сегменты по заданным правилам.
- Использовать рекурсивные CTE для обхода деревьев и графов.
- Сверять отчёты, читать планы выполнения SQLite и решать цельные SQL-тестовые задания.
Для кого
- Выпускники базового SQL, которым нужна следующая ступень практики.
- Аналитики и разработчики, которые хотят увереннее решать многошаговые задачи и готовиться к SQL-тестовым заданиям.
Формат
- 48 текстовых уроков в 12 модулях: объяснения, таблицы и разобранные SQL-примеры.
- 109 SQL-задач с автоматической проверкой на открытых и скрытых тестах, включая 12 модульных кейсов.
- Проверочные вопросы и итоговый проект. Ориентир по программе — 46 часов с практикой; учитесь в своём темпе.
Что нужно на старте
- Умеете писать SELECT с WHERE, GROUP BY и HAVING, пользоваться INNER JOIN и LEFT JOIN.
- Знакомы с CTE, ROW_NUMBER, RANK и LAG/LEAD. Подойдёт наш курс «SQL с нуля» или эквивалентная подготовка.
Автор курса
Алексей Малышкин
Разрабатываю образовательные материалы по программированию, машинному обучению и анализу данных. Темы: Python-разработка, аналитика, ML-инструменты (LangChain, vector databases, AI agents), компьютерное зрение. Стараюсь объяснять технические концепции понятно и структурировано. Ранее преподавал на Stepik и обучил более 2000 студентов. Мой профиль на Stepik - https://stepik.org/users/273781420/profile Мой телеграм для связи @alexey_latorn
Программа
01Корректность запросов4 урока
02Соединения и кардинальность4 урока
03Коррелированные подзапросы4 урока
04Условная агрегация и операции над множествами4 урока
05Оконные рамки4 урока
06Даты и временные ряды4 урока
07Серии, сессии и интервалы4 урока
08Когортный анализ и воронки4 урока
09Рекурсивные CTE4 урока
10Качество данных и сверка отчётов4 урока
11Планы выполнения и индексы4 урока
12Тестовые задания и итоговый проект4 урока
Дополнительные материалы и практика
Задачи
- SQL: Агрегация, оконные вычисления и фильтрация — Категории-лидеры и доля в продажах
- SQL: SELF JOIN и поиск уникальных пар — Пары с несколькими общими проектами
- SQL: Календарная таблица и пропущенные даты — Непрерывный отчёт о звонках
- SQL: Объединение перекрывающихся интервалов — Объединённая занятость внутри отчётного окна
- SQL: Подсчёт одновременно активных интервалов — Максимальное число занятых столов
- SQL: EXPLAIN QUERY PLAN в SQLite — Сводка ошибок и их доля по сервисам
- SQL: Проверка ключей, ссылок и обязательных значений — Нарушения обязательных полей и уникальности
- SQL: Подсчёт одновременно активных интервалов — Пиковые окна работ и занятые слоты
- SQL: Сверка отчётов по ключам и показателям — Состав договоров и число неопознанных оплат
- SQL: Составные и покрывающие индексы — Пакет окон поиска заказов
- SQL: Коррелированные подзапросы и EXISTS — Клиенты с завершённым заказом от 1000
- SQL: EXPLAIN QUERY PLAN в SQLite — Отбор клиентов и разница с максимальным лимитом
- SQL: CASE, COALESCE и NULLIF — Доля конверсий по кампаниям
- SQL: Дата среза и поздняя регистрация событий — Ноябрьские заказы на фиксированный момент
- SQL: Индексы для равенства и диапазона — Закрытые заявки за период
- SQL: RFM-анализ на дату среза — Статистика клиентских RFM-сегментов
- SQL: INTERSECT и EXCEPT — Участники SQL и Git без посещения Python
- SQL: Сводные таблицы через условную агрегацию — Сводка способов доставки VIP-клиентов
- SQL: INTERSECT и EXCEPT — Покупатели обеих категорий
- SQL: RFM-анализ на дату среза — RFM и покупки за последний месяц
- SQL: Проверка интервалов действия — Некорректные границы версии
- SQL: Сводные таблицы через условную агрегацию — Сводка платежей с NULL-категориями и прочими статусами
- SQL: Реляционное деление: условия «для всех» — Клиенты, купившие все обязательные товары
- SQL: Обход графа и защита от циклов — Простые маршруты и допустимые продолжения
- SQL: Взвешенное среднее и агрегация показателей — Общий средний чек через агрегаты категорий
- SQL: Логический порядок выполнения SQL — Регион с наибольшей суммой оплаченных заказов
- SQL: SELF JOIN и поиск уникальных пар — Пары полных тёзок внутри отдела
- SQL: Скользящие показатели по календарным периодам — Семидневная сумма и неполное начало ряда
- SQL: Выделение пользовательских сессий — Номер сессии и позиция клика
- SQL: Расчёт состава изделия рекурсивным запросом — Полная потребность в узлах и общих деталях
- SQL: Обход дерева: глубина и путь — Пути, корни и листья всего каталога
- SQL: CASE, COALESCE и NULLIF — Количество, выручка и категория товара
- SQL: Условная агрегация и COUNT(DISTINCT) — Все заказы и отдельные метрики крупных оплат
- SQL: Формирование когорт — Месяц когорты и её первый успешный заказ
- SQL: Переписывание условий и проверка эквивалентности — Ноябрьский отчёт с паузами клиентов
- SQL: Гранулярность результата и уникальность ключа — Сумма заказов по клиентам
- SQL: Последовательные воронки событий — Конверсия и время прохождения воронки
- SQL: Соединение по диапазону значений — Классификация транзакций по диапазонам
- SQL: Функции дат и расчёт длительности в SQLite — Длительность подписок, пересекающих февраль
- SQL: Последовательные воронки событий — Аудит нарушений порядка и первая аномальная подписка
Уроки
- Дедупликация и выбор последней записи
- Размножение строк при JOIN
- Предварительная агрегация перед JOIN
- Фильтрация в ON и WHERE при LEFT JOIN
- NOT EXISTS и NOT IN при наличии NULL
- Оконные рамки ROWS
- Оконные рамки RANGE и равные значения
- FIRST_VALUE и LAST_VALUE
- AS-OF JOIN: выбор исторического значения
- Gaps and islands: последовательности дат
- Расчёт retention и горизонт наблюдения
- WITH RECURSIVE: структура и условие завершения
