На главную страницу
Характерные ошибки при решении упражнений. Задача 40
Моисеенко С.И.
Для каждой компании, перевозившей пассажиров, подсчитать время, которое провели в
полете самолеты с пассажирами. Вывод: название компании, время в минутах.
Проблемы с задачей можно проиллюстрировать таким сообщением одного из участников:
SELECT Trip.time_out, Trip.time_in
FROM Trip
WHERE Trip.id_comp=2
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
Получается, что компания Аэрофлот произвела два полёта, первый продолжительностью
в 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
Вот результат вышеприведенного запроса:
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.
Перейти к решению
задачи #40
На главную страницу