简体   繁体   中英

Subtracting two COUNT values in SQL

EDIT: UPDATED Is it possible to subtract the results from query 1 with query 2, in one query?

SELECT  
    FlightID, COUNT(*) AS 'Available Seats'  
FROM 
    AircraftSeating 
INNER JOIN 
    Flight ON Flight.FlightAircraftID = AircraftSeating.AircraftID
WHERE 
    FlightID = 10;

Result data set

SELECT 
    PassFlightID, COUNT(*) AS 'Seats Taken' 
FROM 
    `AircraftSeating` 
LEFT JOIN 
    Passenger ON Passenger.PassAircraftSeat = AircraftSeating.AircraftSeatID
WHERE 
    PassFlightID =10;

Result data set

Something like this:

SELECT COUNT(*) AS [AllSeats]
      ,SUM(IF(Passenger.PassAircraftSeat  IS NULL, 0, 1)) AS [Taken Seats]
      ,COUNT(*) - SUM(IF(Passenger.PassAircraftSeat  IS NULL, 0, 1)) AS [Free Seats]
FROM Flight
INNER JOIN AircraftSeating
    ON Flight.FlightAircraftID = AircraftSeating.AircraftID
LEFT JOIN Passenger
    ON Flight.FlightID = Passenger.PassFlightID
    AND AircraftSeating.AircraftSeatID = Passenger.PassAircraftSeat
WHERE Flight.FlightID = 10;

I am pretty sure you can express this in a single query. I think the result is something like this:

SELECT f.FlightID, COUNT(*) as NumSeats,
       COUNT(p.PassAircraftSeat) as NumSeatsTaken,
       (COUNT(*) - COUNT(p.PassAircraftSeat)) as NumSeatsAvailable
FROM Flight f JOIN
     AircraftSeating acs
     ON f.FlightAircraftID = acs.AircraftID LEFT JOIN 
     Passenger p
     ON p.PassAircraftSeat = acs.AircraftSeatID
WHERE f.FlightID = 10;

Your data model is not clear. Flights are generally repeated on different days, and may even have different aircraft. It seems like a date of some sort is needed for the query.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM