SQL LeetCode刷题系列(八)——行程和用户

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/liuzuoping/article/details/102489964

题目描述

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

解题思路

这道题的难度为困难,我也正在不断琢磨,欢迎排列交流

猜你喜欢

转载自blog.csdn.net/liuzuoping/article/details/102489964