SQL-тренажёр онлайн: 46 задач с проверкой

Интерактивный тренажёр SQL онлайн: 46 задач на PostgreSQL, первые 6 бесплатны и открываются без регистрации. Найди подходящее жильё, посчитай выручку и собери отчёт по бронированиям. Запрос пишешь в браузере и сразу проверяешь результат.

начать бесплатно 6 задач бесплатно, без регистрации

Как устроен тренажёр?

Один уровень от задания до «Задание выполнено» — так, как его проходят в тренажёре Koddo: цель и заготовка, проверка по эталону, подсказка и следующий уровень.

01

Уровень с понятной целью

У каждого уровня — задание на данных сервиса бронирований, список того, что должно получиться, и заготовка запроса. Схема базы открыта рядом с редактором, запрос дописываешь сам.

  • 46 уровней от SELECT до рабочих отчётов
  • первые 6 — бесплатно и без регистрации
  • настоящий PostgreSQL прямо в браузере
  • у функции — подсказка по-русски: ROUND(число, знаков) и что значит каждый аргумент
02

Проверка сверяет строки и порядок

«проверить» запускает запрос и сравнивает результат с эталоном: столбцы, строки и их порядок. Не сошлось — тренажёр пишет, где расхождение: в столбцах, в числе строк или в первой отличающейся ячейке. Под твоим результатом — ожидаемый, а в задании открывается подсказка.

  • каждое требование отмечается отдельно
  • ожидаемый результат — прямо под твоим
  • подсказка появляется, когда проверка не прошла
  • ошибку PostgreSQL тренажёр объясняет по-русски и говорит, что написать вместо
03

Уровень за уровнем

Совпало с эталоном — уровень готов: видно, сколько ушло проверок, а следующий уровень открывается одной кнопкой. Пройденные уровни отмечаются в шапке тренажёра.

  • модули идут от первых запросов к оконным функциям и отчётам
  • после входа прогресс сохраняется в аккаунте
  • уровни, решённые без входа, переносятся в аккаунт

Что именно проверяет тренажёр

Тренажёр SQL онлайн работает на PostgreSQL прямо в браузере: движок PGlite выполняет твой запрос на той же базе бронирований, что и эталонный. Перед каждым запуском база пересоздаётся из исходного набора данных, поэтому результат не зависит от прошлых попыток, а устанавливать PostgreSQL или ставить расширения не нужно.

Проверка состоит из трёх требований, и каждое видно отдельно: запрос выполняется без ошибки; набор и порядок колонок совпадают с условием; строки совпадают по значениям и порядку. Числа сравниваются как числа, поэтому 6000 и 6000.0 не считаются разными, а вот лишняя колонка, другой псевдоним или другая сортировка — уже расхождение. Если проверка не прошла, тренажёр называет требование, на котором разошлись, и подсвечивает первую отличающуюся ячейку.

Сравнивается результат, а не текст запроса. Решать можно любым способом — подзапросом, JOIN или CASE: засчитается любой запрос, который возвращает нужные колонки и строки в нужном порядке.

Все 46 задач по порядку

46 задач, 11 модулей, около 6 ч практики. Первые два модуля бесплатные, дальше — Premium.

Первые запросы 2 задачи

  1. 01 Собери каталог жилья SELECT, ORDER BY ≈ 4 мин бесплатно
  2. 02 Поставь выгодные варианты первыми ORDER BY по двум полям ≈ 4 мин бесплатно

Точный поиск 4 задачи

  1. 03 Найди жильё в Москве до 6 000 ₽ WHERE, AND, граница <= ≈ 5 мин бесплатно
  2. 04 Подбери жильё для компании WHERE, IN, BETWEEN ≈ 7 мин бесплатно
  3. 05 Найди похвалу без слов IS NULL, псевдонимы AS ≈ 5 мин бесплатно
  4. 06 Сравни цену на гостя арифметика, ROUND ≈ 6 мин бесплатно

Сводные показатели 3 задачи

  1. 07 Оцени рынок по городам GROUP BY, COUNT, MIN, AVG ≈ 7 мин Premium
  2. 08 Оставь города с выбором GROUP BY, HAVING ≈ 7 мин Premium
  3. 09 Собери сводку по статусам GROUP BY, COUNT, SUM ≈ 6 мин Premium

Связи данных 4 задачи

  1. 10 Соедини жильё с хозяевами JOIN двух таблиц ≈ 7 мин Premium
  2. 11 Разверни удобства московского жилья JOIN через связующую таблицу ≈ 8 мин Premium
  3. 12 Собери маршрут гостя JOIN трёх таблиц, даты ≈ 9 мин Premium
  4. 13 Предложи вариант подешевле таблица соединяется сама с собой, неравенство в ON ≈ 8 мин Premium

Расчёты и условия 3 задачи

  1. 14 Посчитай стоимость бронирований JOIN, вычисляемая колонка ≈ 7 мин Premium
  2. 15 Раздели жильё по ценовым сегментам CASE WHEN ≈ 6 мин Premium
  3. 16 Собери очередь модерации отзывов COALESCE, JOIN ≈ 8 мин Premium

Строки и шаблоны 4 задачи

  1. 17 Найди все студии ILIKE без учёта регистра ≈ 5 мин Premium
  2. 18 Собери строки для ленты отзывов склейка через ||, COALESCE ≈ 7 мин Premium
  3. 19 Перечисли удобства одной строкой string_agg, LEFT JOIN ≈ 9 мин Premium
  4. 20 Найди развёрнутые отзывы length, сортировка по вычисленному ≈ 6 мин Premium

Работа с датами 5 задач

  1. 21 Посчитай выручку по месяцам date_trunc, GROUP BY по месяцу ≈ 8 мин Premium
  2. 22 Покажи в отчёте и пустые месяцы generate_series, LEFT JOIN, COALESCE ≈ 9 мин Premium
  3. 23 Найди заезды в выходные EXTRACT(ISODOW), день недели ≈ 6 мин Premium
  4. 24 Найди брони на даты фестиваля пересечение периодов, арифметика дат ≈ 9 мин Premium
  5. 25 Покажи заезды на ближайший месяц разница дат, BETWEEN ≈ 7 мин Premium

Подзапросы и CTE 4 задачи

  1. 26 Найди жильё дороже среднего подзапрос в WHERE, AVG ≈ 6 мин Premium
  2. 27 Найди жильё без единой брони NOT EXISTS ≈ 7 мин Premium
  3. 28 Найди жильё дороже среднего по своему городу коррелированный подзапрос ≈ 9 мин Premium
  4. 29 Найди гостей, которые тратят больше среднего WITH (CTE), подзапрос к CTE ≈ 10 мин Premium

Оконные функции 6 задач

  1. 30 Пронумеруй жильё по цене в городе ROW_NUMBER, PARTITION BY ≈ 7 мин Premium
  2. 31 Подели жильё на трети по цене NTILE, CTE, CASE ≈ 9 мин Premium
  3. 32 Найди самое дешёвое жильё каждого города ROW_NUMBER, первый в группе ≈ 9 мин Premium
  4. 33 Покажи выручку нарастающим итогом SUM() OVER, нарастающий итог ≈ 8 мин Premium
  5. 34 Найди паузы между поездками гостя LAG, WINDOW ≈ 10 мин Premium
  6. 35 Посчитай долю жилья в выручке города оконная сумма поверх GROUP BY, доля ≈ 12 мин Premium

Задачи как на собеседовании 6 задач

  1. 36 Посчитай долю вернувшихся гостей CTE, COUNT(*) FILTER, доля ≈ 9 мин Premium
  2. 37 Найди брони, где цена за ночь выросла LAG, сравнение с прошлой строкой ≈ 10 мин Premium
  3. 38 Найди хозяев, у которых всё жильё активно HAVING bool_and ≈ 8 мин Premium
  4. 39 Найди жильё, которое приносит 80% выручки нарастающая доля, оконная сумма ≈ 14 мин Premium
  5. 40 Разверни статусы броней в колонки COUNT(*) FILTER, сводная таблица ≈ 9 мин Premium
  6. 41 Найди медианную цену в каждом городе percentile_cont, медиана ≈ 8 мин Premium

Рабочие отчёты 5 задач

  1. 42 Покажи загрузку помещений LEFT JOIN, GROUP BY, COALESCE ≈ 9 мин Premium
  2. 43 Собери рейтинг помещений LEFT JOIN, AVG, NULLS LAST ≈ 10 мин Premium
  3. 44 Оцени портфели хозяев JOIN, GROUP BY, HAVING ≈ 9 мин Premium
  4. 45 Добавь в отчёт строку итога UNION ALL, строка итога ≈ 8 мин Premium
  5. 46 Собери семейный шорт-лист JOIN, HAVING, COUNT(DISTINCT) ≈ 12 мин Premium

Какие темы и в каком порядке

Порядок задач повторяет то, как SQL применяют в работе: сначала выборка и сортировка, потом фильтры, агрегаты и соединения, затем строки, даты, подзапросы и оконные функции, задачи как на собеседовании и рабочие отчёты. Все 46 задач решаются на одной базе сервиса бронирований из шести таблиц: users, rooms, reservations, reviews, amenities, room_amenities. Схема таблиц открыта рядом с редактором, поэтому названия колонок не нужно держать в голове.

  1. Первые запросы SELECT нужных колонок и ORDER BY по одному и двум полям — стабильный порядок строк, без которого проверка не сойдётся.
  2. Точный поиск WHERE с несколькими условиями, IN и BETWEEN, проверка на NULL, псевдонимы через AS, арифметика в SELECT и округление ROUND.
  3. Сводные показатели GROUP BY с COUNT, MIN, AVG и SUM, затем фильтр уже посчитанных групп через HAVING — та самая разница с WHERE, о которой спрашивают на собеседовании.
  4. Связи данных JOIN двух и трёх таблиц, связь «многие ко многим» через таблицу room_amenities, арифметика с датами (дата выезда как check_in + nights) и соединение таблицы с собой — вариант дешевле в том же городе.
  5. Расчёты и условия вычисляемые колонки по сохранённой цене, CASE WHEN для ценовых сегментов и COALESCE вместо пустого комментария.
  6. Строки и шаблоны ILIKE для поиска без учёта регистра, склейка строк через || с подменой NULL, string_agg — список удобств одной строкой — и length для длинных отзывов.
  7. Работа с датами date_trunc для выручки по месяцам, generate_series для месяцев без броней, день недели через EXTRACT, пересечение периодов и разница дат в днях.
  8. Подзапросы и CTE подзапрос в условии, NOT EXISTS для жилья без броней, коррелированный подзапрос со средним по своему городу и WITH, когда промежуточный итог нужен дважды.
  9. Оконные функции ROW_NUMBER с PARTITION BY, первый в группе, деление на сегменты через NTILE, нарастающий итог, LAG для паузы между поездками и доля в выручке города.
  10. Задачи как на собеседовании сюжеты собеседований: доля вернувшихся гостей, рост цены через LAG, «у всех» через HAVING bool_and, жильё, которое приносит 80% выручки, статусы в колонках и медиана.
  11. Рабочие отчёты LEFT JOIN, который сохраняет помещения без бронирований и отзывов, агрегаты поверх соединений, NULLS LAST в сортировке, строка итога через UNION ALL и итоговая задача с HAVING COUNT(DISTINCT).

Тренажёр не объясняет синтаксис: теория к каждой теме — в справочнике по SQL, а задачи с проверкой на скрытых данных — в сборнике «SQL на собеседовании».

Что бесплатно, а что в Premium

Первые два модуля — 6 задач на SELECT, сортировку и фильтры — бесплатны. Нужен только аккаунт, чтобы прогресс сохранялся; карта не нужна. Остальные 40 задач, начиная с агрегатов, открывает подписка Premium.

Бесплатную часть можно решить за один вечер и вернуться к Premium-части позже: тренажёр запомнит, на какой задаче ты остановился. Если хочется сначала попробовать SQL без аккаунта, есть песочница SQL — те же таблицы, но без заданий и проверки.

Кому подходит тренажёр

Как решать задачу: разбор на примере

Возьмём задачу 3 — «Найди жильё в Москве до 6 000 ₽», она бесплатная. Условие: Найди жильё в Москве не дороже 6 000 ₽. Выведи title и price, затем отсортируй результат по цене и названию. В каталоге есть вариант ровно за 6 000 ₽ — не потеряй границу.

Стартовый код уже открыт в редакторе, дописать нужно только условия:

SELECT title, price
FROM rooms
WHERE -- добавь условия
;
  1. Условия два, и оба обязательны, поэтому соединяем их через AND: город равен «Москва», цена не выше 6 000.
  2. Граница включительная: в каталоге есть «Мансарда на Бауманской» ровно за 6 000 ₽. С оператором < вместо <= она пропадёт, и третье требование не пройдёт — именно об этом предупреждает условие.
  3. Сортировка обязательна: ORDER BY price, title. Без неё PostgreSQL не гарантирует порядок строк, и проверка порядка не сойдётся, даже если строки те же.
  4. Псевдонимы менять не нужно: условие просит именно title и price, а проверка колонок сравнивает имена.
SELECT title, price
FROM rooms
WHERE city = 'Москва' AND price <= 6000
ORDER BY price, title;

Результат — 4 строки, от «Бюджетный дом у метро» за 4200 ₽ до «Мансарда на Бауманской» за 6000 ₽, как в примере в начале страницы. Если проверка не прошла, раскрой список требований — тренажёр покажет, какое из трёх не выполнено:

Подсказка к задаче: «Соедини условия оператором AND и используй <= для верхней границы.»

Чем тренажёр отличается от песочницы и курса?

В песочнице можно свободно писать запросы к базе. В тренажёре есть задания, проверка результата и сохранение прогресса.

В курсе «SQL для аналитиков» — 25 самостоятельных задач с дополнительными проверками. Тренажёр — практика на одной базе бронирований: от первого SELECT до оконных функций и задач как на собеседовании.

Вопросы про тренажёр

Подойдёт ли SQL-тренажёр, если я начинаю с нуля?

Если SELECT и WHERE уже знакомы, начинай с первых двух модулей: в них 6 задач с условиями и подсказками, бесплатно. Если ещё не писал SQL, сначала пройди уроки с нуля.

Что входит в бесплатную часть?

Модули «Первые запросы» и «Точный поиск» — 6 задач. Агрегаты, JOIN, строки и даты, подзапросы и CTE, оконные функции, задачи как на собеседовании и рабочие отчёты открываются в Premium.

Нужно ли устанавливать PostgreSQL или регистрироваться?

PostgreSQL устанавливать не нужно: база и проверка работают в браузере. Регистрироваться для бесплатной части тоже не обязательно — аккаунт нужен, чтобы сохранить прогресс.

Как проверяются решения?

Тренажёр выполняет твой запрос и сравнивает результат с эталонным: колонки, строки и порядок. Если что-то не сошлось — видно, что именно.

Что делать после тренажёра?

Продолжить в курсе «SQL для аналитиков»: 25 задач на выборки, объединение таблиц, группировки и работу с датами.