当前位置: 首页 > article >正文

【力扣白嫖日记】262.行程和用户

前言

练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。

今日题目:

262.行程和用户
表:Trips

列名类型
idint
client_idint
deriver_idint
city_idint
statusenum
request_atdate

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

表:Users

列名类型
users_idint
brandenum
roleenum

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

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

编写解决方案找出 “2013-10-01” 至 “2013-10-03” 期间非禁止用户(乘客和司机都必须未被禁止)的取消率。非禁止用户即 banned 为 No 的用户,禁止用户即 banned 为 Yes 的用户。其中取消率 Cancellation Rate 需要四舍五入保留 两位小数 。

返回结果表中的数据 无顺序要求 。


我那不值一提的想法:

  • 首先梳理表内容,题干一共给了一张行程表,一张用户表,行程表记录了行程id,客户id,司机id,城市id,行程状态(‘completed’, ‘cancelled_by_driver’, ‘cancelled_by_client’)
    #以及响应日期。一张用户表,记录了用户id,用户身份(‘client’, ‘driver’, ‘partner’),以及用户是否被禁止
  • 其次分析需求,需要找到 “2013-10-01” 至 “2013-10-03” 期间非禁止用户(乘客和司机都必须未被禁止)的取消率。
  • 对于这道题我认为首先找到禁止用户,也就是banned = "yes"的用户
select users_id 
from Users 
where banned = "yes"
  • 在找到了所有禁止用户后,我们后面查询的时候就可以加上条件,所有用户id和司机id都不在这个里面
client_id not in (
    select users_id 
    from Users 
    where banned = "yes"
)
and driver_id not in (
    select users_id 
    from Users 
    where banned = "yes"
)
  • 那么就可以开始计算非禁止用户的订单总量
count(status)
  • 非禁止用户的拒绝订单总量
sum(if(status = "completed",0,1))
  • 由于是按照日期查询我们还需要加个整体条件where request_at between "2013-10-01" and "2013-10-03",同时不要忘记了最后使用日期进行分组。
  • 到这里,所有步骤完整,将所有代码拼接成完整代码,
select request_at as 'Day',round(sum(if(status = "completed",0,1))/count(status),2) as 'Cancellation Rate'
from Trips
where request_at between "2013-10-01" and "2013-10-03"
and client_id not in (
    select users_id 
    from Users 
    where banned = "yes"
)
and driver_id not in (
    select users_id 
    from Users 
    where banned = "yes"
)
group by request_at

结果:

在这里插入图片描述


总结:

能运行就行。



http://www.kler.cn/a/272556.html

相关文章:

  • 口令攻击和钓鱼攻击
  • 简历_使用 Redis 解决集群模式下的 Session 共享问题,使用拦截器实现用户的登录,校验和权限刷新以及对单位时间内请求频繁的用户IP地址进行限流。
  • 飞牛 使用docker部署Watchtower 自动更新 Docker 容器
  • 数组常见解决方案
  • hydra破解密码
  • cuda + cudnn安装
  • 《深入解析 C#》—— C# 2 部分
  • SAP ABAP read table 时关键字TRANSPORTING NO FIELDS的用法
  • 如何用shell脚本构建Android模块
  • 整型溢出问题及解决之道
  • 一直出现问题,发现服务器磁盘空间已满导致,腾出服务器磁盘空间命令
  • 【Linux下qt软件安装打包附带问题: dpkg: error processing package xxxx +解决方式+自我尝试+记录】
  • 深度学习pytorch——Tensor维度变换(持续更新)
  • Linux怎么查看当前进程?怎么执行退出?怎么查看当前路径?
  • 【Kubernetes】k8s删除master节点后重新加入集群
  • AI换脸软件rope最新更新的蓝宝石中文版下载
  • npm、nodejs和vue之间关系和区别介绍
  • 借助 mydumper 实现定期 MySQL 全量备份、恢复方案
  • C语言经典面试题目(十七)
  • 【总结 干货】Cadence allegro导出光绘 装配丝印
  • 利用生成式人工智能进行功能管理测试
  • 嵌入式领域机器学习入门指南
  • 【C语言】数据结构和流程控制语句
  • miniconda和miniforge之间,我选miniforge
  • nodejs pkg打包跨平台执行文件,带.node插件
  • 五、保持长期高效的七个法则(二)Rules for Staying Productive Long-Term(1)