# Write your MySQL query statement below
2142. 每辆车的乘客人数 I
表: Buses
+--------------+------+ | Column Name | Type | +--------------+------+ | bus_id | int | | arrival_time | int | +--------------+------+ bus_id 是该表的主键。 该表的每一行都包含关于 LeetCode 站点的公交车到达时间的信息。 不会出现两辆公交车会同时到达。
表: Passengers
+--------------+------+ | Column Name | Type | +--------------+------+ | passenger_id | int | | arrival_time | int | +--------------+------+ passenger_id 是该表的主键。 该表的每一行都包含乘客到达 LeetCode 站的时间信息。
公交车和乘客到达 LeetCode 站。如果一辆公交车在时间 tbus
到站,乘客在时间 tpassenger
到站,其中 tpassenger <= tbus
,该乘客之前没有赶上任何公交车,则该乘客将搭乘该公交车。
编写一个 SQL 来查询使用每条总线的用户数量。
返回按 bus_id
升序排序 的结果表。
查询结果格式如下所示。
示例 1:
输入: Buses 表: +--------+--------------+ | bus_id | arrival_time | +--------+--------------+ | 1 | 2 | | 2 | 4 | | 3 | 7 | +--------+--------------+ Passengers 表: +--------------+--------------+ | passenger_id | arrival_time | +--------------+--------------+ | 11 | 1 | | 12 | 5 | | 13 | 6 | | 14 | 7 | +--------------+--------------+ 输出: +--------+----------------+ | bus_id | passengers_cnt | +--------+----------------+ | 1 | 1 | | 2 | 0 | | 3 | 3 | +--------+----------------+ 解释: - 11 号乘客在时间 1 到达。 - 1 号公交车到达时间为 2,搭载 11 号乘客。 - 2 号公交车车在时间 4 到达,没有乘客。 - 12 号乘客在时间 5 到达。 - 13 号乘客在时间 6 到达。 - 14 号乘客在时间 7 到达。 - 3 号车在时间 7 到达,搭载 12、13、14 号乘客。
原站题解
mysql 解法, 执行用时: 688 ms, 内存消耗: 0 B, 提交时间: 2023-10-16 14:20:35
# Write your MySQL query statement below SELECT bus_id, SUM(IF(ISNULL(bus_time),0,1)) AS passengers_cnt FROM ( # 每个乘客选择最合适的搭乘时间 SELECT passenger_id, MIN(B.arrival_time) AS bus_time FROM Buses AS B, Passengers AS P WHERE B.arrival_time >= P.arrival_time GROUP BY passenger_id ) AS temp RIGHT JOIN Buses ON temp.bus_time = Buses.arrival_time GROUP BY bus_id ORDER BY bus_id ASC