Упражнение 93

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

Проблемы, возникающие при решении этой задачи, можно проиллюстрировать таким сообщением одного из участников. Вот что он пишет:

“Если выполнить запрос

SELECT Trip.time_out, Trip.time_in
FROM Trip
WHERE Trip.id_comp=2;
mssql
🚫
[[ error ]]
[[ column ]]
[[ value ]]
time_outtime_in
1900-01-01 09:35:00.0001900-01-01 11:23:00.000
1900-01-01 17:55:00.0001900-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_nodatetime_outtime_in
11452003-04-05 00:00:00.0001900-01-01 09:35:00.0001900-01-01 11:23:00.000
11452003-04-25 00:00:00.0001900-01-01 09:35:00.0001900-01-01 11:23:00.000

Итак, первый рейс был выполнен дважды, а второй - ни разу, т.е. 108*2 = 216.

Решить задачу на SQL-EX.RU