2238. 司机成为乘客的次数 🔒
难度中等
题目描述
表: Rides
+--------------+------+ | Column Name | Type | +--------------+------+ | ride_id | int | | driver_id | int | | passenger_id | int | +--------------+------+ ride_id 是该表的主键(具有唯一值的列)。 该表的每一行都包含驾驶员的 ID 和在 ride_id 中乘车的乘客的 ID。 注意 driver_id != passenger_id。
编写解决方案,获取每个司机的 ID 和他们作为乘客的次数。
以 任意顺序 返回结果表。
结果格式如下所示。
示例 1:
输入: Rides 表: +---------+-----------+--------------+ | ride_id | driver_id | passenger_id | +---------+-----------+--------------+ | 1 | 7 | 1 | | 2 | 7 | 2 | | 3 | 11 | 1 | | 4 | 11 | 7 | | 5 | 11 | 7 | | 6 | 11 | 3 | +---------+-----------+--------------+ 输出: +-----------+-----+ | driver_id | cnt | +-----------+-----+ | 7 | 2 | | 11 | 0 | +-----------+-----+ 解释: 在所有给定的行程中有两名司机: 7 和 11. ID = 7 的司机曾两次成为乘客。 ID = 11 的司机从来不是乘客。
解法
方法一
思考
对每位出现过的司机,统计他作为乘客出现的次数;从未当过乘客则为 \(0\)。直接在 \(\textit{Rides}\) 上按乘客分组会丢掉只当司机、从未坐车的人。
先取出所有不同的 \(\textit{driver\_id}\),再左连接 \(\textit{Rides}\),连接条件是「该司机等于某行的乘客」。分组计数 \(passenger\_id\) 即可,左连接保证零次乘客仍保留。
1 2 3 4 5 6 7 | |