Найти в Дзене

Задача # 7. Разбор задачи по SQL: Определение моделей самолётов, выполняющих рейсы в Москву

Оглавление

SQL — стандартный язык для работы с базами данных, необходимый аналитикам, разработчикам и дата-инженерам. На собеседованиях часто проверяют умение писать эффективные запросы, оптимизировать их и решать реальные бизнес-задачи. Рассмотрим популярные типы SQL-задач и способы их решения.

Предыдущее задание:

Задача 7. Определение моделей самолётов, выполняющих рейсы в Москву

Постановка задачи

Требуется вывести уникальные модели самолётов, которые выполняют рейсы с прибытием в Москву. Результирующая таблица должна содержать одно поле:

  • plane — модель самолёта

Анализ структуры базы данных

Для решения задачи нам понадобится таблица:

  • Trip — содержит информацию о рейсах, включая:
    plane — модель самолёта (нужна для вывода)
    town_to — город прибытия (нужна для фильтрации)

Детальный разбор решения

SQL-запрос

SELECT DISTINCT plane
FROM Trip
WHERE town_to = 'Moscow';

Пошаговое объяснение:

  1. FROM Trip — выбираем данные из таблицы рейсов
  2. WHERE town_to = 'Moscow' — фильтруем только рейсы с прибытием в Москву
  3. SELECT DISTINCT plane — выбираем уникальные модели самолётов

Ключевые аспекты решения

1. Использование DISTINCT

Оператор DISTINCT критически важен, так как:

  • Одна модель самолёта может выполнять множество рейсов в Москву
  • Без DISTINCT мы получим дублирующиеся значения
  • Позволяет получить только уникальные модели

2. Условие фильтрации

Особенности условия town_to = 'Moscow':

  • Должно точно соответствовать формату хранения данных
  • В реальных базах могут быть варианты: 'Москва', 'MOW', 'Moskva'
  • Важно учитывать регистр (при необходимости использовать LOWER/UPPER)

3. Выбор поля для вывода

Мы выбираем только поле plane, так как:

  • Это единственное требуемое поле в результате
  • Другие данные (номер рейса, время и т.д.) не нужны

Возможные модификации запроса

1. Регистронезависимый поиск

Если есть сомнения в регистре:

SELECT DISTINCT plane
FROM Trip
WHERE LOWER(town_to) = 'moscow';

2. Включение города отправления

Если нужно узнать, откуда летают эти самолёты:

SELECT DISTINCT plane, town_from
FROM Trip
WHERE town_to = 'Moscow'
ORDER BY plane;

3. Подсчёт количества рейсов

Для определения самых популярных моделей:

SELECT plane, COUNT(*) as flights_count
FROM Trip
WHERE town_to = 'Moscow'
GROUP BY plane
ORDER BY flights_count DESC;

Оптимизация запроса

Для улучшения производительности:

  1. Создать индекс на поле town_to
  2. Создать индекс на поле plane (если таблица очень большая)
  3. Для частых запросов рассмотреть материализованное представление

Частые ошибки

  1. Забывают указать DISTINCT, получая дубли
  2. Неправильно указывают условие фильтрации (например, town_from вместо town_to)
  3. Добавляют лишние поля в SELECT, усложняя результат

Дополнительные соображения

  1. В реальной базе могут быть разные модели Boeing и Airbus, выполняющие рейсы в Москву
  2. Некоторые самолёты могут быть узкофюзеляжными (для ближнемагистральных рейсов)
  3. Результат может меняться со временем (обновление парка авиакомпаний)

Заключение

Данная задача демонстрирует:

  1. Простую фильтрацию данных по условию
  2. Важность устранения дубликатов
  3. Базовый принцип выборки определённых полей

🔑 Итоговое решение:

SELECT DISTINCT plane
FROM Trip
WHERE town_to = 'Moscow';
-2