Интерактивный тренажёр SQL онлайн: 46 задач на PostgreSQL, первые 6 бесплатны и открываются без регистрации. Найди подходящее жильё, посчитай выручку и собери отчёт по бронированиям. Запрос пишешь в браузере и сразу проверяешь результат.
Один уровень от задания до «Задание выполнено» — так, как его проходят в тренажёре Koddo: цель и заготовка, проверка по эталону, подсказка и следующий уровень.
01
Уровень с понятной целью
У каждого уровня — задание на данных сервиса бронирований, список того, что должно получиться, и заготовка запроса. Схема базы открыта рядом с редактором, запрос дописываешь сам.
46 уровней от SELECT до рабочих отчётов
первые 6 — бесплатно и без регистрации
настоящий PostgreSQL прямо в браузере
у функции — подсказка по-русски: ROUND(число, знаков) и что значит каждый аргумент
sql/Точный поискбесплатно 4/6 · всего 4/46
уровень 05
Найди похвалу без слов
Точный поиск~5 минут
Найди отзывы с оценкой не ниже 4, у которых нет комментария. Выведи id отзыва как review_id и rating; сначала покажи более высокие оценки, затем меньший review_id.
что должно получиться
3
проверка NULL выполняется без ошибки
столбцы называются review_id и rating
выбраны только высокие оценки без комментария в нужном порядке
query.sql
1SELECT id AS review_id, rating
2FROM reviews
3WHERE rating >= 4AND comment = NULL
4 -- оставь только отзывы без текстаORDER BY rating DESC, review_id;
5;
Нажми «проверить» — здесь появится результат
Запрос сверится с эталономсброситьCtrl+Enterпроверить
02
Проверка сверяет строки и порядок
«проверить» запускает запрос и сравнивает результат с эталоном: столбцы, строки и их порядок. Не сошлось — тренажёр пишет, где расхождение: в столбцах, в числе строк или в первой отличающейся ячейке. Под твоим результатом — ожидаемый, а в задании открывается подсказка.
каждое требование отмечается отдельно
ожидаемый результат — прямо под твоим
подсказка появляется, когда проверка не прошла
ошибку PostgreSQL тренажёр объясняет по-русски и говорит, что написать вместо
sql/Точный поискбесплатно 4/6 · всего 4/46
уровень 05
Найди похвалу без слов
Точный поиск~5 минут
Найди отзывы с оценкой не ниже 4, у которых нет комментария. Выведи id отзыва как review_id и rating; сначала покажи более высокие оценки, затем меньший review_id.
что должно получиться
32/3
проверка NULL выполняется без ошибки
столбцы называются review_id и rating
выбраны только высокие оценки без комментария в нужном порядке
подсказка
NULL проверяют через IS NULL, а не через знак равенства.
query.sql
1SELECT id AS review_id, rating
2FROM reviews
3WHERE rating >= 4AND comment =NULL
4ORDER BY rating DESC, review_id;
результат0 строк
Строк 0, а нужно 3
review_idrating
ожидаемый результат3 строки
review_idrating
65
24
104
Запрос сверится с эталономПроверяем результат…Готово 2 из 3. Проверь столбцы, строки и порядок.сброситьCtrl+Enterпроверить
03
Уровень за уровнем
Совпало с эталоном — уровень готов: видно, сколько ушло проверок, а следующий уровень открывается одной кнопкой. Пройденные уровни отмечаются в шапке тренажёра.
модули идут от первых запросов к оконным функциям и отчётам
после входа прогресс сохраняется в аккаунте
уровни, решённые без входа, переносятся в аккаунт
sql/Точный поискбесплатно 4/6 · всего 4/46бесплатно 5/6 · всего 5/46
уровень 05готово
Найди похвалу без слов
Точный поиск~5 минут
Найди отзывы с оценкой не ниже 4, у которых нет комментария. Выведи id отзыва как review_id и rating; сначала покажи более высокие оценки, затем меньший review_id.
что должно получиться
2/33/3
проверка NULL выполняется без ошибки
столбцы называются review_id и rating
выбраны только высокие оценки без комментария в нужном порядке
подсказка
NULL проверяют через IS NULL, а не через знак равенства.
query.sql
1SELECT id AS review_id, rating
2FROM reviews
3WHERE rating >= 4AND comment =ISNULL
4ORDER BY rating DESC, review_id;
результат3 строки
review_idrating
65
24
104
Готово 2 из 3. Проверь столбцы, строки и порядок.Проверяем результат…Результат совпал с эталоном. Задание готово.сброситьCtrl+Enterпроверить
// готово
Задание выполнено
Точный поиск · уровень 05
Найди похвалу без слов
критериев3/3проверок2
дальше: Сравни цену на гостя
остатьсяследующий уровень
Что именно проверяет тренажёр
Тренажёр SQL онлайн работает на PostgreSQL прямо в браузере: движок PGlite выполняет твой запрос на той же базе бронирований, что и эталонный. Перед каждым запуском база пересоздаётся из исходного набора данных, поэтому результат не зависит от прошлых попыток, а устанавливать PostgreSQL или ставить расширения не нужно.
Проверка состоит из трёх требований, и каждое видно отдельно: запрос выполняется без ошибки; набор и порядок колонок совпадают с условием; строки совпадают по значениям и порядку. Числа сравниваются как числа, поэтому 6000 и 6000.0 не считаются разными, а вот лишняя колонка, другой псевдоним или другая сортировка — уже расхождение. Если проверка не прошла, тренажёр называет требование, на котором разошлись, и подсвечивает первую отличающуюся ячейку.
Сравнивается результат, а не текст запроса. Решать можно любым способом — подзапросом, JOIN или CASE: засчитается любой запрос, который возвращает нужные колонки и строки в нужном порядке.
Все 46 задач по порядку
46 задач, 11 модулей, около 6 ч практики. Первые два модуля бесплатные, дальше — Premium.
Первые запросы2 задачи
01Собери каталог жильяSELECT, ORDER BY≈ 4 минбесплатно
02Поставь выгодные варианты первымиORDER BY по двум полям≈ 4 минбесплатно
Точный поиск4 задачи
03Найди жильё в Москве до 6 000 ₽WHERE, AND, граница <=≈ 5 минбесплатно
04Подбери жильё для компанииWHERE, IN, BETWEEN≈ 7 минбесплатно
05Найди похвалу без словIS NULL, псевдонимы AS≈ 5 минбесплатно
06Сравни цену на гостяарифметика, ROUND≈ 6 минбесплатно
Сводные показатели3 задачи
07Оцени рынок по городамGROUP BY, COUNT, MIN, AVG≈ 7 минPremium
08Оставь города с выборомGROUP BY, HAVING≈ 7 минPremium
09Собери сводку по статусамGROUP BY, COUNT, SUM≈ 6 минPremium
Связи данных4 задачи
10Соедини жильё с хозяевамиJOIN двух таблиц≈ 7 минPremium
11Разверни удобства московского жильяJOIN через связующую таблицу≈ 8 минPremium
12Собери маршрут гостяJOIN трёх таблиц, даты≈ 9 минPremium
13Предложи вариант подешевлетаблица соединяется сама с собой, неравенство в ON≈ 8 минPremium
Расчёты и условия3 задачи
14Посчитай стоимость бронированийJOIN, вычисляемая колонка≈ 7 минPremium
15Раздели жильё по ценовым сегментамCASE WHEN≈ 6 минPremium
16Собери очередь модерации отзывовCOALESCE, JOIN≈ 8 минPremium
Строки и шаблоны4 задачи
17Найди все студииILIKE без учёта регистра≈ 5 минPremium
18Собери строки для ленты отзывовсклейка через ||, COALESCE≈ 7 минPremium
19Перечисли удобства одной строкойstring_agg, LEFT JOIN≈ 9 минPremium
20Найди развёрнутые отзывыlength, сортировка по вычисленному≈ 6 минPremium
Работа с датами5 задач
21Посчитай выручку по месяцамdate_trunc, GROUP BY по месяцу≈ 8 минPremium
22Покажи в отчёте и пустые месяцыgenerate_series, LEFT JOIN, COALESCE≈ 9 минPremium
23Найди заезды в выходныеEXTRACT(ISODOW), день недели≈ 6 минPremium
24Найди брони на даты фестиваляпересечение периодов, арифметика дат≈ 9 минPremium
25Покажи заезды на ближайший месяцразница дат, BETWEEN≈ 7 минPremium
Подзапросы и CTE4 задачи
26Найди жильё дороже среднегоподзапрос в WHERE, AVG≈ 6 минPremium
27Найди жильё без единой брониNOT EXISTS≈ 7 минPremium
28Найди жильё дороже среднего по своему городукоррелированный подзапрос≈ 9 минPremium
29Найди гостей, которые тратят больше среднегоWITH (CTE), подзапрос к CTE≈ 10 минPremium
Оконные функции6 задач
30Пронумеруй жильё по цене в городеROW_NUMBER, PARTITION BY≈ 7 минPremium
31Подели жильё на трети по ценеNTILE, CTE, CASE≈ 9 минPremium
32Найди самое дешёвое жильё каждого городаROW_NUMBER, первый в группе≈ 9 минPremium
Порядок задач повторяет то, как SQL применяют в работе: сначала выборка и сортировка, потом фильтры, агрегаты и соединения, затем строки, даты, подзапросы и оконные функции, задачи как на собеседовании и рабочие отчёты. Все 46 задач решаются на одной базе сервиса бронирований из шести таблиц: users, rooms, reservations, reviews, amenities, room_amenities. Схема таблиц открыта рядом с редактором, поэтому названия колонок не нужно держать в голове.
Первые запросыSELECT нужных колонок и ORDER BY по одному и двум полям — стабильный порядок строк, без которого проверка не сойдётся.
Точный поискWHERE с несколькими условиями, IN и BETWEEN, проверка на NULL, псевдонимы через AS, арифметика в SELECT и округление ROUND.
Сводные показателиGROUP BY с COUNT, MIN, AVG и SUM, затем фильтр уже посчитанных групп через HAVING — та самая разница с WHERE, о которой спрашивают на собеседовании.
Связи данныхJOIN двух и трёх таблиц, связь «многие ко многим» через таблицу room_amenities, арифметика с датами (дата выезда как check_in + nights) и соединение таблицы с собой — вариант дешевле в том же городе.
Расчёты и условиявычисляемые колонки по сохранённой цене, CASE WHEN для ценовых сегментов и COALESCE вместо пустого комментария.
Строки и шаблоныILIKE для поиска без учёта регистра, склейка строк через || с подменой NULL, string_agg — список удобств одной строкой — и length для длинных отзывов.
Работа с датамиdate_trunc для выручки по месяцам, generate_series для месяцев без броней, день недели через EXTRACT, пересечение периодов и разница дат в днях.
Подзапросы и CTEподзапрос в условии, NOT EXISTS для жилья без броней, коррелированный подзапрос со средним по своему городу и WITH, когда промежуточный итог нужен дважды.
Оконные функцииROW_NUMBER с PARTITION BY, первый в группе, деление на сегменты через NTILE, нарастающий итог, LAG для паузы между поездками и доля в выручке города.
Задачи как на собеседованиисюжеты собеседований: доля вернувшихся гостей, рост цены через LAG, «у всех» через HAVING bool_and, жильё, которое приносит 80% выручки, статусы в колонках и медиана.
Рабочие отчётыLEFT JOIN, который сохраняет помещения без бронирований и отзывов, агрегаты поверх соединений, NULLS LAST в сортировке, строка итога через UNION ALL и итоговая задача с HAVING COUNT(DISTINCT).
Первые два модуля — 6 задач на SELECT, сортировку и фильтры — бесплатны. Нужен только аккаунт, чтобы прогресс сохранялся; карта не нужна. Остальные 40 задач, начиная с агрегатов, открывает подписка Premium.
Бесплатную часть можно решить за один вечер и вернуться к Premium-части позже: тренажёр запомнит, на какой задаче ты остановился. Если хочется сначала попробовать SQL без аккаунта, есть песочница SQL — те же таблицы, но без заданий и проверки.
Кому подходит тренажёр
Аналитикам и тем, кто идёт в аналитику. Больше половины задач — сводки, даты, оконные функции, сюжеты собеседований и отчёты, как в реальных выгрузках: выручка по месяцам без пропусков, нарастающий итог, доля в выручке города, медиана цены.
Junior-разработчикам бэкенда. JOIN через связующую таблицу, LEFT JOIN без потери строк, COALESCE и CASE — то, что потом попадает в код запросов и ручной SQL в сервисах.
Тем, кто готовится к собеседованию. Разница WHERE и HAVING, LEFT JOIN с нулями вместо пропусков, сортировка с NULLS LAST — типовые вопросы интервью, а в модуле «Задачи как на собеседовании» — удержание, медиана и 80% выручки. После тренажёра переходи к задачам по SQL с решениями и сборнику «SQL на собеседовании».
Если ещё не писал ни одного SELECT — начни с уроков SQL с нуля: тренажёр не объясняет синтаксис, а проверяет результат.
Как решать задачу: разбор на примере
Возьмём задачу 3 — «Найди жильё в Москве до 6 000 ₽», она бесплатная. Условие: Найди жильё в Москве не дороже 6 000 ₽. Выведи title и price, затем отсортируй результат по цене и названию. В каталоге есть вариант ровно за 6 000 ₽ — не потеряй границу.
Стартовый код уже открыт в редакторе, дописать нужно только условия:
SELECT title, price
FROM rooms
WHERE -- добавь условия
;
Условия два, и оба обязательны, поэтому соединяем их через AND: город равен «Москва», цена не выше 6 000.
Граница включительная: в каталоге есть «Мансарда на Бауманской» ровно за 6 000 ₽. С оператором < вместо <= она пропадёт, и третье требование не пройдёт — именно об этом предупреждает условие.
Сортировка обязательна: ORDER BY price, title. Без неё PostgreSQL не гарантирует порядок строк, и проверка порядка не сойдётся, даже если строки те же.
Псевдонимы менять не нужно: условие просит именно title и price, а проверка колонок сравнивает имена.
SELECT title, price
FROM rooms
WHERE city = 'Москва' AND price <= 6000
ORDER BY price, title;
Результат — 4 строки, от «Бюджетный дом у метро» за 4200 ₽ до «Мансарда на Бауманской» за 6000 ₽, как в примере в начале страницы. Если проверка не прошла, раскрой список требований — тренажёр покажет, какое из трёх не выполнено:
запрос выполняется без ошибки
результат содержит title и price
остались все подходящие московские варианты, включая цену 6 000 ₽
Подсказка к задаче: «Соедини условия оператором AND и используй <= для верхней границы.»
Чем тренажёр отличается от песочницы и курса?
В песочнице можно свободно писать запросы к базе. В тренажёре есть задания, проверка результата и сохранение прогресса.
В курсе «SQL для аналитиков» — 25 самостоятельных задач с дополнительными проверками. Тренажёр — практика на одной базе бронирований: от первого SELECT до оконных функций и задач как на собеседовании.
Уроки SQL с нуля — начни здесь, если ещё не знаком с SELECT и WHERE
Песочница SQL — свободные запросы в браузере, без регистрации
Если SELECT и WHERE уже знакомы, начинай с первых двух модулей: в них 6 задач с условиями и подсказками, бесплатно. Если ещё не писал SQL, сначала пройди уроки с нуля.
Что входит в бесплатную часть?
Модули «Первые запросы» и «Точный поиск» — 6 задач. Агрегаты, JOIN, строки и даты, подзапросы и CTE, оконные функции, задачи как на собеседовании и рабочие отчёты открываются в Premium.
Нужно ли устанавливать PostgreSQL или регистрироваться?
PostgreSQL устанавливать не нужно: база и проверка работают в браузере. Регистрироваться для бесплатной части тоже не обязательно — аккаунт нужен, чтобы сохранить прогресс.
Как проверяются решения?
Тренажёр выполняет твой запрос и сравнивает результат с эталонным: колонки, строки и порядок. Если что-то не сошлось — видно, что именно.
Что делать после тренажёра?
Продолжить в курсе «SQL для аналитиков»: 25 задач на выборки, объединение таблиц, группировки и работу с датами.