• leetcode困难262.行程和用户


    表:Trips

    Column NameType
    idint
    client_idint
    driver_idint
    city_idint
    statusenum
    request_atdate

    id 是这张表的主键。
    这张表中存所有出租车的行程信息。每段行程有唯一 id ,其中 client_id 和 driver_id 是 Users 表中 users_id 的外键。
    status 是一个表示行程状态的枚举类型,枚举成员为(‘completed’, ‘cancelled_by_driver’, ‘cancelled_by_client’) 。

    表:Users

    Column NameType
    users_idint
    bannedenum
    roleenum

    users_id 是这张表的主键。
    这张表中存所有用户,每个用户都有一个唯一的 users_id ,role 是一个表示用户身份的枚举类型,枚举成员为 (‘client’, ‘driver’, ‘partner’) 。
    banned 是一个表示用户是否被禁止的枚举类型,枚举成员为 (‘Yes’, ‘No’) 。

    问题

    取消率 的计算方式如下:(被司机或乘客取消的非禁止用户生成的订单数量) / (非禁止用户生成的订单总数)。

    写一段 SQL 语句查出 “2013-10-01” 至 “2013-10-03” 期间非禁止用户(乘客和司机都必须未被禁止)的取消率。非禁止用户即 banned 为 No 的用户,禁止用户即 banned 为 Yes 的用户。

    返回结果表中的数据可以按任意顺序组织。其中取消率 Cancellation Rate 需要四舍五入保留 两位小数 。

    查询结果格式如下例所示。

    示例:

    输入:
    Trips 表:

    idclient_iddriver_idcity_idstatusrequest_at
    11101completed2013-10-01
    22111cancelled_by_driver2013-10-01
    33126completed2013-10-01
    44136cancelled_by_client2013-10-01
    51101completed2013-10-02
    62116completed2013-10-02
    73126completed2013-10-02
    821212completed2013-10-03
    931012completed2013-10-03
    1041312cancelled_by_driver2013-10-03

    Users 表:

    users_idbannedrole
    1Noclient
    2Yesclient
    3Noclient
    4Noclient
    10Nodriver
    11Nodriver
    12Nodriver
    13Nodriver

    输出:

    DayCancellation Rate
    2013-10-010.33
    2013-10-020.00
    2013-10-030.50

    解释:
    2013-10-01:

    • 共有 4 条请求,其中 2 条取消。
    • 然而,id=2 的请求是由禁止用户(user_id=2)发出的,所以计算时应当忽略它。
    • 因此,总共有 3 条非禁止请求参与计算,其中 1 条取消。
    • 取消率为 (1 / 3) = 0.33
      2013-10-02:
    • 共有 3 条请求,其中 0 条取消。
    • 然而,id=6 的请求是由禁止用户发出的,所以计算时应当忽略它。
    • 因此,总共有 2 条非禁止请求参与计算,其中 0 条取消。
    • 取消率为 (0 / 2) = 0.00
      2013-10-03:
    • 共有 3 条请求,其中 1 条取消。
    • 然而,id=8 的请求是由禁止用户发出的,所以计算时应当忽略它。
    • 因此,总共有 2 条非禁止请求参与计算,其中 1 条取消。
    • 取消率为 (1 / 2) = 0.50

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/trips-and-users
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解题

    select request_at Day,
        round(
            sum(if(t.status='completed',0,1))
            /count(t.status),2
            )   'Cancellation Rate'
    from trips t 
    join users u1 on t.client_id=u1.users_id and u1.banned='No'
    join users u2 on t.driver_id=u2.users_id and u2.banned='No'
    where t.request_at between '2013-10-01' and '2013-10-03'
    group by request_at
    order by request_at;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    算取消率还可以:
    avg(status !=‘completed’)
    只能是内连接,不能左连接

  • 相关阅读:
    【摘星星计划】day16-dayxx:react基础
    实时备案查询易语言代码
    震裕转债上市价格预测
    【数据结构】—图的基本概念
    堡垒机的相关介绍
    一起来学Kotlin:概念:11. Kotlin this 的使用
    一三六、从零到一实现自动化部署
    区间信息维护与查询【树状数组 】 - 原理1 一维树状数组
    常见Java面试练习题回答
    [数据集][目标检测]高空抛物数据集VOC+YOLO格式259张+6段视频+yolov8模型+探讨
  • 原文地址:https://blog.csdn.net/qq_25886325/article/details/125883628