博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Trips and Users 旅行和用户
阅读量:6341 次
发布时间:2019-06-22

本文共 3215 字,大约阅读时间需要 10 分钟。

The Trips table holds all taxi trips. Each trip has a unique Id, while Client_Id and Driver_Id are both foreign keys to the Users_Id at the Users table. Status is an ENUM type of (‘completed’, ‘cancelled_by_driver’, ‘cancelled_by_client’).

+----+-----------+-----------+---------+--------------------+----------+| Id | Client_Id | Driver_Id | City_Id |        Status      |Request_at|+----+-----------+-----------+---------+--------------------+----------+| 1  |     1     |    10     |    1    |     completed      |2013-10-01|| 2  |     2     |    11     |    1    | cancelled_by_driver|2013-10-01|| 3  |     3     |    12     |    6    |     completed      |2013-10-01|| 4  |     4     |    13     |    6    | cancelled_by_client|2013-10-01|| 5  |     1     |    10     |    1    |     completed      |2013-10-02|| 6  |     2     |    11     |    6    |     completed      |2013-10-02|| 7  |     3     |    12     |    6    |     completed      |2013-10-02|| 8  |     2     |    12     |    12   |     completed      |2013-10-03|| 9  |     3     |    10     |    12   |     completed      |2013-10-03| | 10 |     4     |    13     |    12   | cancelled_by_driver|2013-10-03|+----+-----------+-----------+---------+--------------------+----------+

The Users table holds all users. Each user has an unique Users_Id, and Role is an ENUM type of (‘client’, ‘driver’, ‘partner’).

+----------+--------+--------+| Users_Id | Banned |  Role  |+----------+--------+--------+|    1     |   No   | client ||    2     |   Yes  | client ||    3     |   No   | client ||    4     |   No   | client ||    10    |   No   | driver ||    11    |   No   | driver ||    12    |   No   | driver ||    13    |   No   | driver |+----------+--------+--------+

Write a SQL query to find the cancellation rate of requests made by unbanned clients between Oct 1, 2013 and Oct 3, 2013. For the above tables, your SQL query should return the following rows with the cancellation rate being rounded to two decimal places.

+------------+-------------------+|     Day    | Cancellation Rate |+------------+-------------------+| 2013-10-01 |       0.33        || 2013-10-02 |       0.00        || 2013-10-03 |       0.50        |+------------+-------------------+

这道题给了我们一个Trips表里面有一些Id和状态,还有请求时间,然后还有一个Users表,里面有顾客和司机的信息,然后有该顾客和司机有没有被Ban的信息,让我们返回一个结果看某个时间段内由没有被ban的顾客提出的取消率是多少,其实题目没有说清楚顾客到底包不包括司机,其实是包括的,由司机提出的取消请求也应计算进去,我们用Case When ... Then ... Else ... End关键字来做,我们用cancelled%来表示开头是cancelled的所有项,这样就包括了driver和client,然后分母是所有项,限制条件里限定了时间段,然后是没有被ban的,由于结果需要保留两位小数,所以我们用Round关键字且给定参数2即可,参见代码如下:

解法一:

SELECT t.Request_at Day, ROUND(SUM(CASE WHEN t.Status LIKE 'cancelled%' THEN 1 ELSE 0 END)/COUNT(*), 2) 'Cancellation Rate'FROM Trips t JOIN Users u ON t.Client_Id = u.Users_Id AND u.Banned = 'No' WHERE t.Request_at BETWEEN '2013-10-01' AND '2013-10-03' GROUP BY t.Request_at;

上面的Case When ... Then ... Else ... End关键字也可以用If关键字来替换,实现的效果一样:

解法二:

SELECT Request_at Day, ROUND(COUNT(IF(Status != 'completed', TRUE, NULL)) / COUNT(*), 2) 'Cancellation Rate'FROM Trips WHERE (Request_at BETWEEN '2013-10-01' AND '2013-10-03') AND Client_Id IN(SELECT Users_Id FROM Users WHERE Banned = 'No') GROUP BY Request_at;

本文转自博客园Grandyang的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
eclipse html 打开方式
查看>>
[求助] win7 x64 封装 出现 Administrator.xxxxx 的问题
查看>>
人类投资经理再也无法击败电脑的时代终将到来了...
查看>>
一个最小手势库的实现
查看>>
HoloLens开发手记 - Vuforia开发概述 Vuforia development overview
查看>>
Android支付之支付宝封装类
查看>>
<亲测>CentOS中yum安装ffmpeg
查看>>
【分享】马化腾:产品设计与用户体验
查看>>
【机器学习PAI实践十】深度学习Caffe框架实现图像分类的模型训练
查看>>
全智慧的网络:思科十年来最具颠覆性的创新
查看>>
怎样将现有应用迁移到 VMware NSX
查看>>
赛门铁克收购以色列移动安全初创公司Skycure 旨在构建网络安全防御平台
查看>>
《Photoshop蒙版与合成(第2版)》目录—导读
查看>>
“最佳人气奖”出炉!4月27号,谁能拿到阿里聚安全算法挑战赛的桂冠?
查看>>
《网页美工设计Photoshop+Flash+Dreamweaver从入门到精通》——2.6 图层与图层样式...
查看>>
《iOS组件与框架——iOS SDK高级特性剖析》——第2章,第2.7节获取线路
查看>>
Spring中 @Autowired标签与 @Resource标签 的区别
查看>>
人工智能凭什么毁灭人类
查看>>
今天的学习
查看>>
面试必问之JVM原理
查看>>