Задачи по SQL онлайн: решите и проверьте запрос

32 задачи на одной учебной базе — авиакомпания с рейсами, бронированиями и билетами. Откройте задачу, напишите запрос, и сервер сверит результат с эталоном. Бесплатно, без установки и регистрации.

Таблицы и столбцы базы — на странице «SQL онлайн»: там же можно выполнить любой запрос без проверки, чтобы посмотреть данные.

Задачи по SQL для начинающих

SELECT, сортировка, LIMIT и DISTINCT. Хватит знания, что таблица состоит из строк и столбцов.

  1. Задача 1 · SELECT и алиас

    Километры в заголовке

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

  2. Задача 2 · ORDER BY

    Аэропорты по алфавиту

    Составь алфавитный список аэропортов: столбцы airport_name и city из таблицы airports, строки отсортированы по названию аэропорта (airport_name).

  3. Задача 3 · ORDER BY и LIMIT

    Самые восточные аэропорты

    Найди пять самых восточных аэропортов. Выведи из таблицы airports столбцы airport_name, city и longitude, отсортируй по longitude по убыванию и оставь первые пять строк.

  4. Задача 4 · DISTINCT

    Статусы рейсов

    Какие статусы бывают у рейсов? Выведи все различные значения status из таблицы flights — один столбец status, строки по алфавиту.

Задачи на WHERE и условия

Оставить нужные строки: сравнения, несколько условий, диапазон, поиск по шаблону и пустые значения.

  1. Задача 5 · WHERE

    Дальнемагистральные самолёты

    Новому маршруту нужен самолёт с дальностью больше 5 700 км. Найди такие модели: выведи model и range из таблицы aircrafts. Порядок строк не важен.

  2. Задача 6 · BETWEEN

    Самолёты средней дальности

    Маршрутам средней длины подходят самолёты с дальностью от 3 000 до 5 700 км включительно. Выведи их model и range, отсортируй по range по возрастанию.

  3. Задача 7 · AND и OR

    Шереметьево — Пулково, 1 августа

    Коллеге нужно 1 августа 2026 года улететь из Шереметьево (SVO) в Пулково (LED). Подходят рейсы с вылетом по расписанию в 12:35 или позже, но строго раньше 18:40. Выведи flight_no, scheduled_departure, status. Отсортируй по scheduled_departure.

  4. Задача 8 · LIKE

    Все Боинги

    Сколько в парке Боингов и как далеко они летают? Выведи model и range самолётов, у которых название модели начинается со слова «Боинг». Порядок строк не важен.

  5. Задача 9 · IS NULL

    Отмены без вылета

    Пассажирам отменённых рейсов положен возврат денег. Найди в таблице flights рейсы из Домодедово (DME), которые отменены и действительно не вылетели: статус Cancelled, а фактического вылета нет — actual_departure пустой. Выведи flight_no, scheduled_departure, arrival_airport. Отсортируй по scheduled_departure, затем по flight_no.

Задачи на функции и даты

Округлить число, достать час из времени и собрать ряд дат без пропусков.

  1. Задача 10 · ROUND

    Дальность в милях

    Партнёр из США просит дальность самолётов в милях. Выведи из aircrafts столбцы model, range и range_miles — дальность в милях: раздели range на 1.609 (в одной миле 1,609 км; в запросе дробную часть отделяет точка) и округли до целого. Отсортируй по range по убыванию.

  2. Задача 11 · дата и время

    Вечер в Шереметьево

    Какие рейсы вылетают из Шереметьево (SVO) 1 августа 2026 года в 17:00 или позже по расписанию? Выведи flight_no, arrival_airport и dep_hour — час вылета по расписанию. Отсортируй по scheduled_departure, при равенстве — по flight_no.

  3. Задача 12 · ряд дат

    Отмены по дням августа

    Сколько рейсов отменено в каждый день августа 2026 года? День — дата вылета по расписанию, отменённый рейс — status = 'Cancelled'. В результате должен быть каждый день с 1 по 31 августа, дни без отмен — с нулём. Столбцы: flight_date (тип DATE) и cancelled. Отсортируй по flight_date.

Задачи на GROUP BY и HAVING

Свернуть тысячи строк в короткую сводку и оставить в ней только нужные группы.

  1. Задача 13 · COUNT

    Отменённые рейсы

    Сколько вылетов в базе отменено (status = Cancelled)? Выведи один столбец cancelled_flights.

  2. Задача 14 · GROUP BY

    Вылеты по статусам

    Сколько вылетов в каждом статусе? Выведи status и flights_count, отсортируй по flights_count по убыванию.

  3. Задача 15 · HAVING

    Самые загруженные аэропорты

    Из каких аэропортов больше 400 вылетов за весь период? Выведи departure_airport и flights_count, отсортируй по flights_count по убыванию.

Задачи на JOIN

Собрать ответ из нескольких таблиц и не потерять строки без пары.

  1. Задача 16 · INNER JOIN

    Рейсы по моделям самолётов

    Сколько рейсов по расписанию приходится на каждую модель самолёта? Считай все строки flights — все рейсы по расписанию, включая будущие и отменённые. Выведи столбцы model и flights_count. Отсортируй по flights_count по убыванию, при равенстве — по model.

  2. Задача 17 · LEFT JOIN

    Самолёт, который не летает

    Есть ли в парке модели без единого рейса в flights? Выведи столбцы aircraft_code и model, отсортируй по aircraft_code.

  3. Задача 18 · несколько JOIN

    Куда прилетает больше всего людей

    В какие города прилетело больше всего пассажиров? Считай рейсы со статусом Arrived; один пассажир на рейсе — одна строка ticket_flights. Выведи 10 городов: столбцы arrival_city и passengers. Отсортируй по passengers по убыванию, при равенстве — по arrival_city.

Задачи на CASE и NULL

Разложить строки по своим категориям и не ошибиться там, где значение не заполнено.

  1. Задача 19 · CASE WHEN

    Салон Боинга 777 по-русски

    Посчитай места в Боинге 777-300 (aircraft_code = '773') по классам и назови классы по-русски: Economy → «Эконом», Comfort → «Комфорт», Business → «Бизнес». В результате — столбцы class_ru и seats_count. Отсортируй по seats_count по убыванию.

  2. Задача 20 · NULL и COUNT

    Где заполнено время

    Сводка для проверки качества данных: для каждого статуса рейса посчитай, сколько всего рейсов и у скольких заполнено фактическое время вылета и прилёта. В результате — столбцы status, flights_count, with_departure (заполнен actual_departure) и with_arrival (заполнен actual_arrival). Отсортируй по flights_count по убыванию.

Задачи на подзапросы, CTE и UNION

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

  1. Задача 21 · подзапрос в WHERE и SELECT

    Дальность выше средней

    Какие модели летают дальше, чем в среднем по парку, и на сколько? Оставь модели, у которых дальность больше средней по всем моделям. В результате — столбцы model, range и above_avg_km (дальность минус средняя, округли до целого). Отсортируй по range по убыванию.

  2. Задача 22 · WITH

    Где задерживают дольше

    Где вылеты задерживают дольше всего? Найди пять аэропортов с самой большой средней задержкой вылета среди тех, откуда уже вылетело не меньше 207 рейсов. В результате — столбцы departure_airport, flights (сколько рейсов вылетело) и avg_delay_min (средняя задержка в минутах, округли до одного знака). Отсортируй по avg_delay_min по убыванию, при равенстве — по departure_airport.

  3. Задача 23 · UNION

    Аэропорты, задетые отменами

    Служба, которая обзванивает аэропорты, просит список тех, кого коснулись отмены в августе 2026 года. Отмена — рейс со status = 'Cancelled' и scheduled_departure в августе; она касается и аэропорта вылета, и аэропорта прилёта. В результате — один столбец airport_code; каждый аэропорт один раз, даже если отмен было две. Отсортируй по airport_code.

Задачи на оконные функции

Агрегат рядом со строкой, ранги, топ в группе, доля от итога, нарастающий итог и сравнение с предыдущей строкой.

  1. Задача 24 · OVER

    Дальность против средней по парку

    Выведи все модели самолётов с дальностью, а рядом в каждой строке — среднюю дальность парка и разницу с ней. Столбцы: model, range, avg_range (средняя по всем моделям) и diff_from_avg (дальность модели минус средняя) — оба округли до целого. Отсортируй по range от большей к меньшей.

  2. Задача 25 · ROW_NUMBER и RANK

    Места по дальности

    Пронумеруй модели самолётов по дальности: самой дальней — 1, следующей — 2 и так далее. Столбцы: model, range, place. Отсортируй по place.

  3. Задача 26 · топ-N в группе

    Самый долгий рейс каждой модели

    Найди самый долгий по расписанию рейс каждой модели самолёта. Время в пути в минутах — EXTRACT(EPOCH FROM scheduled_arrival - scheduled_departure) / 60. При равном времени бери рейс с меньшим flight_no. Столбцы: aircraft_code, flight_no, departure_airport, arrival_airport, minutes. По одной строке на модель — в результате 8 строк: у Аэробуса A320 рейсов нет. Отсортируй по aircraft_code.

  4. Задача 27 · доля от итога

    Рейсы по статусам

    Для каждого статуса рейса посчитай число рейсов flights_count и долю от всех рейсов в процентах share_pct, округлённую до двух знаков. Считай все рейсы таблицы flights. Отсортируй по числу рейсов от большего к меньшему.

  5. Задача 28 · нарастающий итог

    Бронирования нарастающим итогом

    Для каждого дня продаж выведи число бронирований bookings и накопленное с первого дня число бронирований running_bookings. День — дата из book_date. Отсортируй по дню.

  6. Задача 29 · LAG

    День к дню

    Для каждого дня продаж выведи число бронирований bookings, число бронирований накануне prev_bookings и разницу diff = bookings − prev_bookings. Продажи начались 17 июня, до этого бронирований не было: у первого дня prev_bookings должен быть 0, а не NULL. Отсортируй по дню.

Задачи по SQL с собеседований

То, что спрашивают на уровне middle: серии дней подряд, второе по величине значение, возврат на следующий день.

  1. Задача 30 · серии и острова

    Серии участника 159

    Найди все серии дней подряд, в которые участник 159 открывал приложение (событие app_open). Для каждой серии выведи первый день first_day, последний день last_day и число дней streak_days. Отсортируй по first_day.

  2. Задача 31 · N-е по величине

    Вторая цена в каждом классе

    Классика собеседований — вторая по величине цена. Для каждого класса обслуживания найди самый высокий тариф, действующий на момент среза, и вторую цену — самую высокую, которая строго меньше максимальной. Попробуй через MAX и условие «меньше максимума», без LIMIT, OFFSET и окон: проверка смотрит только на результат, способ — на твоей совести. Столбцы: fare_conditions, max_price, second_price. Отсортируй по fare_conditions.

  3. Задача 32 · возврат на следующий день

    Вернулись на следующий день

    Вопрос с собеседования: какая доля пользователей возвращается на следующий день? Для каждого дня с 27 июля по 2 августа посчитай клиентов (client_id) с событиями в этот день и сколько из них пришли снова на следующий календарный день. Столбцы: activity_day, active_clients, returned_next_day, returned_pct (доля вернувшихся в процентах, один знак). Отсортируй по activity_day.

Что решать дальше

Эти задачи — выборка из двух курсов. В «SQL с нуля» 94 задачи от первого SELECT до подзапросов, в «Продвинутом SQL» — 154: оконные функции, сессии, JSON, продуктовые метрики и задачи с собеседований.

Если нужны задачи с готовыми ответами, чтобы сверяться, — 30 SQL-задач с решениями. Готовитесь к собеседованию — задачи с собеседований аналитика и вопросы по SQL.

Частые вопросы

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

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

Где посмотреть правильный ответ?

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

Какой диалект SQL нужен?

Пишите так, как писали бы в PostgreSQL. Запросы выполняет DuckDB, его синтаксис к PostgreSQL очень близок; где базы расходятся, проверка предупредит.

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

Нет. Здесь задачи решаются без аккаунта, но и прогресс не сохраняется. В курсах прогресс запоминается в браузере, а с аккаунтом — между устройствами.

Где взять больше задач?

В курсе «SQL с нуля» 94 задачи, в «Продвинутом SQL» — 154, все с проверкой. Задачи идут по темам, от простой к сложной; первые 10 и 6 уроков открыты бесплатно.