题目描述
Trips 表中存所有出租车的行程信息。每段行程有唯一键 Id,Client_Id 和 Driver_Id 是 Users 表中 Users_Id 的外键。Status 是枚举类型,枚举成员为 (‘completed’, ‘cancelled_by_driver’, ‘cancelled_by_client’)。

Users 表存所有用户。每个用户有唯一键 Users_Id。Banned 表示这个用户是否被禁止,Role 则是一个表示(‘client’, ‘driver’, ‘partner’)的枚举类型。

写一段 SQL 语句查出 2013年10月1日 至 2013年10月3日 期间非禁止用户的取消率。基于上表,你的 SQL 语句应返回如下结果,取消率(Cancellation Rate)保留两位小数。

题解
SELECT
Request_at AS Day
,ROUND(
SUM(
CASE
WHEN Status != 'completed' THEN 1
ELSE 0
END
)
/
COUNT(Status),2
) AS 'Cancellation Rate'
FROM Trips AS T
WHERE
T.Client_Id NOT IN(
SELECT Users_Id
FROM Users
WHERE Banned='Yes')
AND
T.Driver_Id NOT IN(
SELECT Users_Id
FROM Users
WHERE Banned='Yes' )
AND T.Request_at BETWEEN '2013-10-01' AND '2013-10-03'
GROUP BY T.Request_at
解题思路
这道题的难度为困难,我也正在不断琢磨,欢迎排列交流
本文介绍了一种使用SQL查询特定日期范围内非禁止用户的取消率的方法。通过连接Trips和Users表,筛选出符合条件的记录,并计算出取消率。
1450

被折叠的 条评论
为什么被折叠?



