行程和用户[阅读理解法]

150 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第16天,行程和用户[阅读理解法] - 掘金 (juejin.cn)

前言

对于一种SQL复杂题类型之一,就是阅读理解题,而解决方式也可以按照阅读理解的方式解决。抽出需求的主干句子,状语定语作为筛选,句子内再套一个句子,那就分层写view。

一、行程与用户

image.png

image.png

二、阅读理解

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 行程与用户