loading..
Русский    English
09:41
листать

Упражнение 93

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

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

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

Консоль
Выполнить
  1. SELECT Trip.time_out, Trip.time_in
  2.        FROM Trip
  3.        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
то получается, что компания Аэрофлот (id_comp=2) произвела два полёта, первый продолжительностью в 1 час 48 минут, второй - продолжительностью 2 часа 6 минут. Итоговая продолжительность полётов получается 108 + 126= 234 минуты, а никак не 216 минут, как указано в "правильном результате".

Непонимание вызвано недостаточным изучением схемы БД и её описанием. Таблица Trip представляет собой расписание полетов, которые выполняются ежедневно. А вот в таблице Pass_in_trip содержится информация о полетах с пассажирами. Давайте посмотрим, какие рейсы компании с id_comp=2 были выполнены:

Консоль
Выполнить
  1. SELECT pt.trip_no, date, time_out, time_in
  2.        FROM pass_in_trip pt
  3.        JOIN
  4.        (SELECT trip_no,time_out,time_in FROM trip WHERE id_comp=2) t
  5.                ON t.trip_no=pt.trip_no
  6.        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.

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

Bookmark and Share
Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE Convert COUNT CROSS APPLY CTE DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INNER JOIN insert INTERSECT IS NOT NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker MAX MIN MONTH MySQL NOT Больше тэгов
Учебник обновлялся
месяц назад
Группа компаний ОПОРА
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.
Rambler's Top100