携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第16天,行程和用户[阅读理解法] - 掘金 (juejin.cn)
前言
对于一种SQL复杂题类型之一,就是阅读理解题,而解决方式也可以按照阅读理解的方式解决。抽出需求的主干句子,状语定语作为筛选,句子内再套一个句子,那就分层写view。
一、行程与用户
二、阅读理解
target:国庆前3天,非禁止用户的取消率,保留2位小数。
1-国庆前3天,where request_at between '2013-10-01' and '2013-10-03' 2-非禁止用户,where banned = 'No'
注:通过with view as的方式,将状语筛选逻辑限定在各自的表内。
3-取消率,被司机|乘客取消的订单数 / 用户生成的订单数。
# Write your MySQL query statement below
/*
target:国庆前3天,非禁止用户的取消率,保留2位小数。
1-国庆前3天,where request_at between '2013-10-01' and '2013-10-03'
2-非禁止用户,where banned = 'Yes'
注:通过with view as的方式,将状语筛选逻辑限定在各自的表内。
3-取消率,被司机|乘客取消的订单数 / 用户生成的订单数。
*/
with view4trips as(
select client_id,driver_id,status,request_at
from Trips
where request_at between '2013-10-01' and '2013-10-03'
),view4users as(
select users_id
from Users
where banned = 'No'
)
select
date_format(request_at,'%Y-%m-%d') Day,
round(
count(if(status != 'completed',1,null)) / count(1)
,2) `Cancellation Rate`
from view4users v1 join view4trips v2 on v1.users_id = v2.client_id
join view4users v3 on v2.driver_id = v3.users_id
group by Day
order by Day
总结
1)阅读理解题要抓主干,分语言成分,来进行筛选/表瘦身成view/view的同步(句子嵌套)。
参考文献
[1] LeetCode 行程与用户