Запрос на объединение и подсчет некоторых данных из нескольких таблиц - mysql - PullRequest
0 голосов
/ 02 февраля 2019

Я хочу, чтобы для данного диапазона времени даты было получено:

  • Название аэропорта,
  • Количество рейсов в этом аэропорту (количество раз, когда этот аэропорт прибывает в аэропорт при полете, в то время какДата отправления того же рейса находится в указанном диапазоне дат / времени),
  • Количество проданных билетов этого аэропорта (dateOfSale должен быть в указанном диапазоне дат-времени) и
  • Общая стоимость проданных билетовэтого аэропорта.

У меня есть 3 таблицы (аэропорт, рейс и билет):

Airport data:
    id | name
    1  , Madrid Airport
    2  , Amsterdam Airport
    3  , Belgrade Airport
----------------------------------------------
Flight data:
    id | number |   departureDate   |    arrivalDate    |  departureAirport  |  arrivalAirport  | price
    1  , 101    ,2019-01-29 19:21:44,2019-01-29 22:21:44,  Madrid Airport    , Amsterdam Airport, 600
    2  , 102    ,2019-01-29 22:21:44,2019-01-30 00:21:44,  Madrid Airport    , Belgrade Airport , 450
    3  , 103    ,2019-01-30 20:21:44,2019-01-30 22:21:44,  Belgrade Airport  , Amsterdam Airport, 555
    4  , 104    ,2019-02-10 20:21:44,2019-02-10 22:21:44,  Belgrade Airport  , Madrid Airport   , 555
----------------------------------------------
Ticket data:
    id | FlightId | dateOfSale
    1  , 3        , 2019-01-23 00:00:00
    2  , 3        , 2019-01-27 10:00:00
    3  , 1        , 2019-01-27 13:00:00

Пример диапазона времени и даты:

  • Минимальный: 2019-01-25 19:21:44

  • Максимальный: 2019-02-02 00: 00: 00

СПри заданном диапазоне дат и времени только четвертый рейс не пройдет условие, поскольку его дата отправления не находится в заданном диапазоне, остальные три рейса пройдут.

Итак, теперь у нас есть аэропорт Амстердама (x2) и Аэропорт Белграда (x1) какприбытие в аэропорт.Таким образом, первые два столбца должны быть представлены следующим образом:

Name of Airport  | Number of Flights | 
Amsterdam Airport, 2
Belgrade Airport , 1

Третий столбец представляет количество проданных билетов, в то время как dateOfSale также находится в заданном диапазоне дат / времени.

В таблице билетов продано 3 билетапервые два приобретаются для полета с id = 3, а третий билет покупается для полета с id = 1.Так как dateOfSale первого билета не находится в заданном диапазоне времени / даты, только 2-й и 3-й билеты пройдут , и оба они представляют аэропорт прибытия, называемый Амстердамским аэропортом.

Таким образом, конечный результат должен быть:

Name of Airport  | Number of Flights | Number of sold tickets | Total price
Amsterdam Airport, 2                 , 2                      , 1155
Belgrade Airport , 1                 , 0                      , 0 

Я пробовал что-то вроде этого:

select a.name, count(f.arrivalAirport) as 'number of flights', 
count(t.dateOfSale) as 'number of sold tickets', sum(f.price) from airport a, 
flight f, ticket t where a.name = f.arrivalAirport and f.departureDate > 
'2019-01-25 19:21:44' and f.departureDate < '2019-02-02 00:00:00' and 
t.flightId = f.id and t.dateOfSale > '2019-01-25 19:21:44' and t.dateOfSale 
< '2019-02-02 00:00:00' group by a.name;

Делая только это, он подсчитывает количество проданных билетов точно так же, как и должен, но количество рейсов неверно.

Я не уверен, что делать дальше.Чего мне не хватает в этом запросе, и можно ли это сделать так, или в него должно быть включено объединение (с которым у меня тоже проблемы)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...