SQL-基于多行减法显示可用座位
我一直在尝试编写一个查询,从几个表中检索航班信息和座位预订,我的目标是显示取消('C')、保留('R')和可用座位数的航班详细信息。我已设法获得取消和预订座位的详细信息,但我正在努力根据这些信息计算可用座位。似乎因为有两排,所以这一排是在重置座位数,而不是正确计算座位数。我的代码在下面SQL-基于多行减法显示可用座位,sql,postgresql,Sql,Postgresql,我一直在尝试编写一个查询,从几个表中检索航班信息和座位预订,我的目标是显示取消('C')、保留('R')和可用座位数的航班详细信息。我已设法获得取消和预订座位的详细信息,但我正在努力根据这些信息计算可用座位。似乎因为有两排,所以这一排是在重置座位数,而不是正确计算座位数。我的代码在下面 SELECT f.FlightID, f.FlightDate, fb.Status, sum(numseats) AS NumberOfTotalSeats, maxcapacity - sum(numsea
SELECT f.FlightID, f.FlightDate, fb.Status, sum(numseats) AS
NumberOfTotalSeats, maxcapacity - sum(numseats) AS NumberOfAvailiableSeats
FROM Flight f
INNER JOIN FlightBooking fb ON f.FlightID = fb.FlightID
WHERE (f.flightID = 5 AND fb.status = 'R') OR (f.flightID = 5 AND fb.status
= 'C')
GROUP BY f.FlightID, fb.status
目前,它返回以下内容:
FlightID, FlightDate, Status, NumberOfTotalSeats, NumberOfAvailableSeats
5, 2017-04-07 00:00:00, C, 10, 490
5 ,2017-04-07 00:00:00, R, 2, 498
我希望NumberOfAvailableSets列为每个列显示488,并编辑我的查询以允许这样做。我正在使用PostgreSQL 9.6
提前谢谢 您希望将
总和置于两个状态总和之上:
SELECT
f.FlightID,
f.FlightDate,
fb.Status,
sum(fb.numseats) AS NumberOfTotalSeats,
f.maxcapacity - sum(sum(fb.numseats)) over (partition by f.FlightID)
AS NumberOfAvailiableSeats
FROM Flight f
INNER JOIN FlightBooking fb ON f.FlightID = fb.FlightID
WHERE f.flightID = 5 AND fb.status IN ('R','C')
GROUP BY f.FlightID, fb.status;
然而,正如pozs所提到的,用一行文字就能更容易阅读:
SELECT
f.FlightID,
f.FlightDate,
f.maxcapacity,
sum(case when fb.Status = 'R' then fb.numseats else 0 end) as reserved,
sum(case when fb.Status = 'C' then fb.numseats else 0 end) as cancelled,
f.maxcapacity - sum(fb.numseats) AS NumberOfAvailiableSeats
FROM Flight f
INNER JOIN FlightBooking fb ON f.FlightID = fb.FlightID
WHERE f.flightID = 5 AND fb.status IN ('R','C')
GROUP BY f.FlightID;
正如波茨在另一个问题中所问的:减去所有预订和取消的座位有意义吗?所以,取消预订和预订一样会阻碍座位?可能您必须调整算法甚至数据模型。您的左连接作为常规内部连接执行,因为WHERE子句中有这些fb条件。谢谢,已更改了codeSidenote中的连接注意:为什么需要两个单独的行?带有FlightID、FlightDate、NumberOfReservedSeats、NumberOfCancelled seats、NumberOfAvailableSeats
的单行将更易于使用。取消的座位是否可以再次预订?如果是,是否有座位ID(在航班预订
的那些行中可能相同)?(请发布整个表定义和示例数据)。,-所有表和列都相同。它是什么?