262. 行程和用户(困难)
题目描述:
取消率 的计算方式如下:(被司机或乘客取消的非禁止用户生成的订单数量) / (非禁止用户生成的订单总数)。
写一段 SQL 语句查出 “2013-10-01” 至 “2013-10-03” 期间非禁止用户(乘客和司机都必须未被禁止)的取消率。非禁止用户即 banned 为 No 的用户,禁止用户即 banned 为 Yes 的用户。
返回结果表中的数据可以按任意顺序组织。其中取消率 Cancellation Rate 需要四舍五入保留 两位小数 。
查询结果格式如下例所示。
考察重点:SQL语句编写。连接两表分别查询出未被禁止的司机和乘客所在的单号,之后过滤出同时在二者中(即此单号乘客与司机均未被禁止
)且在指定日期内的单号,最后通过聚合函数得到每日的取消率。
select a.request_at as 'Day',
round(COUNT(case when a.`status`!='completed' then 1 end) / COUNT(*), 2) as 'Cancellation Rate'
from
(select * from trips JOIN users on users_id = driver_id and banned = 'No') as a,
(select * from trips JOIN users on users_id = client_id and banned = 'No') as b
WHERE a.id = b.id and a.request_at <= '2013-10-03' and a.request_at >= '2013-10-01'
GROUP BY a.request_at