列表

详情


2793. 航班机票状态

表: Flights

+-------------+------+
| 列名        | 类型 |
+-------------+------+
| flight_id   | int  |
| capacity    | int  |
+-------------+------+
flight_id 列包含不同的值。
每行包含航班 id 和座位容量。

表:Passengers

+--------------+----------+
| 列名         | 类型 |
+--------------+----------+
| passenger_id | int      |
| flight_id    | int      |
| booking_time | datetime |
+--------------+----------+
passenger_id 包含不同的值。
booking_time 包含不同的值。
每行包含乘客 id、预订时间和所预订的航班 id。

乘客提前预订航班机票。如果乘客预订了一张航班机票,并且航班上还有空座位,则乘客的机票将 得到确认 。然而,如果航班已经满员,乘客将被列入 等候名单

编写解决方案来确定每个乘客航班机票的当前状态。

passenger_id 升序排序 返回结果表。

查询结果的格式如下所示。

 

示例 1:

输入:
Flights 表:
+-----------+----------+
| flight_id | capacity |
+-----------+----------+
| 1         | 2        |
| 2         | 2        |
| 3         | 1        |
+-----------+----------+
Passengers 表:
+--------------+-----------+---------------------+
| passenger_id | flight_id | booking_time        |
+--------------+-----------+---------------------+
| 101          | 1         | 2023-07-10 16:30:00 |
| 102          | 1         | 2023-07-10 17:45:00 |
| 103          | 1         | 2023-07-10 12:00:00 |
| 104          | 2         | 2023-07-05 13:23:00 |
| 105          | 2         | 2023-07-05 09:00:00 |
| 106          | 3         | 2023-07-08 11:10:00 |
| 107          | 3         | 2023-07-08 09:10:00 |
+--------------+-----------+---------------------+
输出:
+--------------+-----------+
| passenger_id | Status    |
+--------------+-----------+
| 101          | Confirmed | 
| 102          | Waitlist  | 
| 103          | Confirmed | 
| 104          | Confirmed | 
| 105          | Confirmed | 
| 106          | Waitlist  | 
| 107          | Confirmed | 
+--------------+-----------+
解释:
- 航班 1 的容量为 2 位乘客。乘客 101 和乘客 103 是最先预订机票的,已经确认他们的预订。然而,乘客 102 是第三位预订该航班的乘客,这意味着没有更多的可用座位。乘客 102 现在被列入等候名单。
- 航班 2 的容量为 2 位乘客,已经有两位乘客预订了机票,乘客 104 和乘客 105。由于预订机票的乘客数与可用座位数相符,这两个预订都得到了确认。
- 航班 3 的容量为 1 位乘客,乘客 107 先预订并获得了唯一的可用座位,确认了他们的预订。预订时间在乘客 107 之后的乘客 106 被列入等候名单。

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
# Write your MySQL query statement below

mysql 解法, 执行用时: 324 ms, 内存消耗: 0 B, 提交时间: 2023-10-15 17:22:06

# Write your MySQL query statement below

with t1 as(
    select p.*, f.capacity
    from Passengers p 
    join Flights f 
    on f.flight_id=p.flight_id
)
,
t2 as(
    select *,
    row_number() over(partition by flight_id order by booking_time asc) as rn
    from t1
)

select passenger_id,
(case when rn<=capacity then "Confirmed" else "Waitlist" end) as Status
from t2
order by  passenger_id asc

mysql 解法, 执行用时: 446 ms, 内存消耗: 0 B, 提交时间: 2023-10-15 17:21:28

# Write your MySQL query statement below
select passenger_id, case when idx <= capacity then 'Confirmed' else 'Waitlist' end Status 
from ( select a.passenger_id, rank() over(partition by a.flight_id order by a.booking_time) idx, 
b.capacity from Passengers a join Flights b on(a.flight_id=b.flight_id) ) c order by passenger_id

上一题