如何减去差价?

How to get minus off to the the difference?

我正在寻找可用的座位。我尝试使用以下代码,以获取减去容量值后的总行。但它没有这样做。我可以知道正确的做法是什么吗?

 SELECT r.Route_No, s.Serial_No, s.Flight_Fly_On, a.Capacity, (Capacity - (count(*) FROM scheduled) AS Available_Seat
    FROM Route r, Scheduled s, Airplane a
    WHERE s.Serial_No = a.Serial_No
    AND r.Route_No = s.Route_No;

请测试以下查询。
我已经标准化了 JOIN 条件,指定我们正在计算时间表 table,并添加了 GROUP BY。
我还添加了 count(s.Route_No) AS seats_booked 列,这样,如果查询没有 return 预期结果,您可以检查 COUNT() 是否正确。如果有问题,这将有助于找到问题。

SELECT 
  r.Route_No, 
  s.Serial_No, 
  s.Flight_Fly_On, 
  a.Capacity AS total_seats, 
  COUNT(s.Route_No) AS seats_booked
  (a.Capacity - (count(s.Route_No) FROM scheduled) AS Available_Seats
FROM Route r 
JOIN Scheduled s ON r.Route_No = s.Route_No
JOIN Airplane a on s.Serial_No = a.Serial_No
GROUP BY
  r.Route_No, 
  s.Serial_No, 
  s.Flight_Fly_On, 
  a.Capacity ;

假设您的 SCHEDULED table 计算某人在特定航班上的时间,并且您可以使用航线、飞机序列号和航班日期唯一标识航班,那么您可以我们使用解析 COUNT 函数(而不是使用 sub-query):

SELECT r.Route_No,
       s.Serial_No,
       s.Flight_Fly_On,
       a.Capacity,
       a.Capacity - COUNT(*) OVER (PARTITION BY s.route_no, s.serial_no, s.flight_fly_on)
         AS Available_Seat
FROM   Route r
       INNER JOIN Scheduled s
       ON (r.Route_No = s.Route_No)
       INNER JOIN Airplane a
       ON (s.Serial_No = a.Serial_No);

如果您确实想使用 sub-query,那么您需要将其关联到外部查询:

SELECT r.Route_No,
       s.Serial_No,
       s.Flight_Fly_On,
       a.Capacity,
       a.Capacity - (SELECT COUNT(*)
                     FROM   Scheduled c
                     WHERE  s.route_no      = c.route_no
                     AND    s.serial_no     = c.serial_no
                     AND    s.flight_fly_on = c.flight_fly_on)
         AS Available_Seat
FROM   Route r
       INNER JOIN Scheduled s
       ON (r.Route_No = s.Route_No)
       INNER JOIN Airplane a
       ON (s.Serial_No = a.Serial_No);

如果不是 SCHEDULED table 保存了一个人的预订详情,而是 BOOKINGS table,那么您正在使用错误的 table 需要从正确的 table:

算起
SELECT r.Route_No,
       s.Serial_No,
       s.Flight_Fly_On,
       a.Capacity,
       a.Capacity - (SELECT COUNT(*)
                     FROM   Bookings b
                     WHERE  b.scheduled_no = s.scheduled_no)
         AS Available_Seat
FROM   Route r
       INNER JOIN Scheduled s
       ON (r.Route_No = s.Route_No)
       INNER JOIN Airplane a
       ON (s.Serial_No = a.Serial_No);