учебный путь · sql
SQL для аналитиков
Практика PostgreSQL на данных интернет-магазина «Ярко»: от первого SELECT до когортного анализа. Выборки, агрегаты, соединения, даты и оконные функции — то, что спрашивают на собеседованиях аналитиков.
AI-ассистент ведёт подсказками, но решение не выдаёт
intro
Что тебя ждёт в этом пути
// Что ты построишь
25 запросов к базе интернет-магазина — от первой строки SELECT до когортного анализа, который спрашивают на собеседовании аналитика. Данные живые и грязные: город записан то «Казань», то «казань», у части клиентов нет почты, суммы заказов не всегда сходятся с позициями. Ты научишься доставать из такой базы честные цифры: выручку по городам, средний чек по каналам, спящих клиентов, топ товаров в каждой категории, выручку нарастающим итогом и возвращаемость по когортам.
// Для кого
Ты идёшь в аналитику данных или уже работаешь с отчётами, но SQL знаешь по обрывкам. Программировать не нужно: первая задача решается одной строкой, а каждая новая конструкция вводится своим модулем — сначала выборки, потом агрегаты, соединения, даты и только в финале оконные функции.
// Чему научишься
- SELECT, WHERE, ORDER BY с ничьими, ILIKE и NULL-семантика
- GROUP BY и HAVING: чем фильтр по строкам отличается от фильтра по агрегату
- INNER и LEFT JOIN, анти-джойн и ловушка «LEFT JOIN + WHERE»
- Полуоткрытые интервалы дат, date_trunc, интервальная арифметика
- Подзапросы, CTE и DISTINCT ON
- Оконные функции: rank, выручка нарастающим итогом, топ-1 в группе
- Когорты и retention — задача с реального собеседования
curriculum
Задачи пути — 5 модулей, 25 задач
Каждый модуль — навык. Решаешь задачи по порядку, и к финалу из них собирается рабочий результат.
1.1
Список клиентов
Первый SELECT: две колонки из таблицы клиентов с сортировкой по имени.
1.2
Крупные оплаченные заказы
Составное условие WHERE: статус и денежная граница «от».
1.3
Витрина дорогих товаров
ORDER BY по убыванию с tie-break и LIMIT: топ-5 каталога.
1.4
Клиенты из Казани
Регистронезависимый поиск по строке: ILIKE против грязных данных.
1.5
Дырявые анкеты
NULL нельзя поймать через «= NULL»: IS NULL и условие ИЛИ.
2.1
Заказы по статусам
Первый GROUP BY: число заказов в каждом статусе, имя метрики через AS.
2.2
Средний чек по каналам
WHERE до группировки, avg и округление до копеек через round.
2.3
Постоянные покупатели
Первый HAVING: фильтр по агрегату отбирает клиентов с тремя и более оплаченными заказами.
2.4
Ценовые вилки категорий
Два агрегата в одном запросе: min и max цены каждой категории.
2.5
Ходовые позиции
sum вместо count: суммарное количество по строкам заказов и порог через HAVING.
3.1
Заказы с именами
Первый INNER JOIN: имена клиентов к pending-заказам по внешнему ключу.
3.2
Молчаливые клиенты
Анти-джойн: LEFT JOIN + IS NULL находит клиентов без единого заказа.
3.3
Выручка по городам
JOIN + GROUP BY: оплаченная выручка по городам клиентов, «казань» отдельно от «Казань».
3.4
Июньский зачёт по всем
LEFT JOIN с условиями в ON и coalesce: июньская оплата каждого клиента, включая нули.
3.5
Сверка сумм заказов
Аудит данных: JOIN + HAVING находит заказы, где amount расходится с суммой позиций.
4.1
Заказы июня
Выборка за месяц через полуоткрытый интервал: BETWEEN теряет последний день.
4.2
Динамика по месяцам
date_trunc обрезает таймстамп до месяца, ::date приводит к дате.
4.3
Дата первой покупки
min по времени + каст к дате: точка отсчёта для когортного анализа.
4.4
Долгий путь к покупке
Разница дат в днях: date - date = integer в PostgreSQL.
4.5
Спящие клиенты
Интервальная арифметика от литеральной даты «сегодня»: последний заказ старше 60 дней.
5.1
Выше среднего чека
Скалярный подзапрос в WHERE: заказы дороже среднего чека.
5.2
Последний заказ каждого
PostgreSQL-идиома DISTINCT ON: первая строка каждой группы.
5.3
Бестселлер каждой категории
rank() OVER (PARTITION BY …): топ-1 в каждой категории.
5.4
Выручка нарастающим итогом
Оконный агрегат поверх GROUP BY: дневная выручка и нарастающий итог.
5.5
Когорты и возвращаемость капстоун
Финал курса: когорты по месяцу первой покупки и retention.
❯ koddo start sql-for-analysts
Готов начать этот путь?
Зарегистрируйся — откроем путь прямо на первой задаче. Без установки и настройки, всё в браузере.