Упражнение 93
Упражнение 93
Для каждой компании, перевозившей пассажиров, подсчитать время, которое провели в полете самолеты с пассажирами. Вывод: название компании, время в минутах.
Проблемы, возникающие при решении этой задачи, можно проиллюстрировать таким сообщением одного из участников. Вот что он пишет:
“Если выполнить запрос
SELECT Trip.time_out, Trip.time_in
FROM Trip
WHERE Trip.id_comp=2;
mssql
🚫
[[ error ]]
[[ column ]] |
---|
[[ value ]] |
time_out | time_in |
---|---|
1900-01-01 09:35:00.000 | 1900-01-01 11:23:00.000 |
1900-01-01 17:55:00.000 | 1900-01-01 20:01:00.000 |
то получается, что компания Аэрофлот (id_comp=2) выполнила два полёта, первый продолжительностью в 1 час 48 минут, второй - продолжительностью 2 часа 6 минут. Итоговая продолжительность полётов получается 108 + 126= 234 минуты, а никак не 216 минут, как указано в “правильном результате”. |
Непонимание вызвано недостаточным изучением схемы БД и её описанием. Таблица Trip представляет собой расписание полетов, которые выполняются ежедневно. А вот в таблице Pass_in_trip содержится информация о полетах с пассажирами. Давайте посмотрим, какие рейсы компании с id_comp=2 были выполнены:
SELECT pt.trip_no, date, time_out, time_in
FROM pass_in_trip pt
JOIN (SELECT trip_no,time_out,time_in
FROM trip WHERE id_comp=2
) t ON t.trip_no=pt.trip_no
GROUP BY pt.trip_no, date, time_out, time_in;
mssql
🚫
[[ error ]]
[[ column ]] |
---|
[[ value ]] |
Вот результат вышеприведенного запроса:
trip_no | date | time_out | time_in |
---|---|---|---|
1145 | 2003-04-05 00:00:00.000 | 1900-01-01 09:35:00.000 | 1900-01-01 11:23:00.000 |
1145 | 2003-04-25 00:00:00.000 | 1900-01-01 09:35:00.000 | 1900-01-01 11:23:00.000 |
Итак, первый рейс был выполнен дважды, а второй - ни разу, т.е. 108*2 = 216.