SQL — стандартный язык для работы с базами данных, необходимый аналитикам, разработчикам и дата-инженерам. На собеседованиях часто проверяют умение писать эффективные запросы, оптимизировать их и решать реальные бизнес-задачи. Рассмотрим популярные типы SQL-задач и способы их решения.
Предыдущее задание:
Задача 7. Определение моделей самолётов, выполняющих рейсы в Москву
Постановка задачи
Требуется вывести уникальные модели самолётов, которые выполняют рейсы с прибытием в Москву. Результирующая таблица должна содержать одно поле:
- plane — модель самолёта
Анализ структуры базы данных
Для решения задачи нам понадобится таблица:
- Trip — содержит информацию о рейсах, включая:
plane — модель самолёта (нужна для вывода)
town_to — город прибытия (нужна для фильтрации)
Детальный разбор решения
SQL-запрос
SELECT DISTINCT plane
FROM Trip
WHERE town_to = 'Moscow';
Пошаговое объяснение:
- FROM Trip — выбираем данные из таблицы рейсов
- WHERE town_to = 'Moscow' — фильтруем только рейсы с прибытием в Москву
- 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;
Оптимизация запроса
Для улучшения производительности:
- Создать индекс на поле town_to
- Создать индекс на поле plane (если таблица очень большая)
- Для частых запросов рассмотреть материализованное представление
Частые ошибки
- Забывают указать DISTINCT, получая дубли
- Неправильно указывают условие фильтрации (например, town_from вместо town_to)
- Добавляют лишние поля в SELECT, усложняя результат
Дополнительные соображения
- В реальной базе могут быть разные модели Boeing и Airbus, выполняющие рейсы в Москву
- Некоторые самолёты могут быть узкофюзеляжными (для ближнемагистральных рейсов)
- Результат может меняться со временем (обновление парка авиакомпаний)
Заключение
Данная задача демонстрирует:
- Простую фильтрацию данных по условию
- Важность устранения дубликатов
- Базовый принцип выборки определённых полей
🔑 Итоговое решение:
SELECT DISTINCT plane
FROM Trip
WHERE town_to = 'Moscow';