Как заставить SUM () суммировать только пассажиров, выбранных MIN ()? - PullRequest
1 голос
/ 13 июля 2020

У меня вопрос по SQL Серверу. Я пытаюсь найти авиакомпании с наименьшим количеством рейсов, а также мне нужно получить сумму пассажиров, которые авиакомпания, выбранная MIN(), имела на своих рейсах. Я сделал код, который позволяет мне получить MIN() и Name авиакомпании, но я не могу получить правильную сумму, он всегда суммирует все. Я вставлю таблицы своей базы данных и код, который я использовал для получения MIN(). Помните, что я не могу использовать явное значение.

Мои таблицы:

                                             FLIGHTS
NumFlight  |       Date          | Origin |Destination|  Airline  | NumPassengers | International|
___________|_____________________|________|___________|___________|_______________|______________|
44             2014-02-08            2          3           3           135              Yes
76             2014-03-17            2          1           2            80              No
380            2014-06-04            5          1           2           147              No
421            2014-04-21            1          2           1           185              No
572            2014-09-12            5          4           3            99              Yes
906            2014-05-10            3          2           3           154              Yes
918            2014-12-24            1          5           1           122              No
           AIRLINES
   AirlineID  |   Name    |
______________|___________|
       1         Delta
       2         United
       3        Air France
             CITY
    CityID    |      City       |
______________|_________________|
      1           Chicago
      2           New York
      3           Paris
      4           Madrid
      5           Houston

Мой запрос :

SELECT A.Name, MINIMUM.[# of Flights] AS 'N. of Flights'
FROM AIRLINES A,
     (SELECT MIN(F.Total) AS '# of Flights' FROM 
        (SELECT Airline, COUNT(Airline) AS 'Total' FROM FLIGHTS GROUP BY Airline) F,
        AIRLINES A
    WHERE A.AirlineID = F.Airline) MINIMUM,
    (SELECT Airline, COUNT(Airline) AS 'Total' FROM FLIGHTS GROUP BY Airline) TOTAL
WHERE TOTAL.Total = MINIMUM.[# of Flights] AND A.AirlineID = TOTAL.Airline

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

У меня вопрос по SQL Серверу. Я пытаюсь найти авиакомпании с наименьшим количеством рейсов

Я бы предложил использовать top (1) with ties:

select a.*, f.numflights, f.NumPassengers
from airlines a join
     (select top (1) with ties airlineid, count(*) as numflights, sum(NumPassengers) as NumPassengers
      from flights f
      group by airlineid
      order by count(*) asc
     ) f
     on f.airlineid = a.airlineid;
0 голосов
/ 13 июля 2020

Вы можете использовать оконную функцию с apply:

select a.name, f1.Total_flights, TotalPassenger
from AIRLINES a inner join
     (select Airline, count(*) as Total_flights, 
              row_number() over (partition by Airline order by count(*)) as seq
      from FLIGHTS
      group by Airline
     ) fl
     on fl.Airline = a.AirlineID and seq = 1 cross apply
     (select sum(f.NumPassengers) as TotalPassenger
      from FLIGHTS f
      where f.Airline = f1.Airline
     ) fpassenger;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...