71. Найти вторых пилотов, летавших в New York в августе 2023
Условие задачи:
Даны таблицы pilots, planes и flights.
Необходимо вывести имена пилотов, которые в качестве второго пилота летали в New York в августе 2023 года.
Результат должен содержать только поле name, без дубликатов.
В описании таблицы flights отсутствует поле second_pilot_id, хотя оно используется в условии задачи. Будем считать, что это поле есть и ссылается на pilots.pilot_id.
Код:
pilots
- pilot_id (PK)
- name
- age
planes
- plane_id (PK)
- plane_name
- capacity
- cargo_flag
flights
- flight_id (PK)
- flight_date (DATE)
- plane_id -> planes.plane_id
- first_pilot_id -> pilots.pilot_id
- second_pilot_id -> pilots.pilot_id
- destination
Спойлеры к решению
Подсказки
💡 Соедини
💡 Отфильтруй рейсы с
💡 Для августа 2023 удобно использовать полуинтервал дат: от
💡 Чтобы один пилот не выводился несколько раз, используй
flights с pilots по second_pilot_id.💡 Отфильтруй рейсы с
destination = 'New York'.💡 Для августа 2023 удобно использовать полуинтервал дат: от
2023-08-01 включительно до 2023-09-01 не включительно.💡 Чтобы один пилот не выводился несколько раз, используй
DISTINCT.Решение
SELECT DISTINCT
p.name
FROM flights f
JOIN pilots p
ON p.pilot_id = f.second_pilot_id
WHERE f.destination = 'New York'
AND f.flight_date >= DATE '2023-08-01'
AND f.flight_date < DATE '2023-09-01';
Соединение:
JOIN pilots p
ON p.pilot_id = f.second_pilot_id
позволяет получить данные именно о втором пилоте каждого рейса.
Диапазон:
f.flight_date >= DATE '2023-08-01'
AND f.flight_date < DATE '2023-09-01'
выбирает все рейсы за август 2023 года.
DISTINCT нужен, чтобы пилот, совершивший несколько подходящих рейсов, появился в результате только один раз.
Таблица planes для решения этой задачи не требуется, поскольку никаких условий по самолёту в запросе нет.