LeetCode_sql_day15(262.行程与用户)

news2024/9/25 23:25:37

描述:262. 行程和用户 - 力扣(LeetCode)

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

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

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

输入: 
Trips 表:
+----+-----------+-----------+---------+---------------------+------------+
| id | client_id | driver_id | city_id | status              | request_at |
+----+-----------+-----------+---------+---------------------+------------+
| 1  | 1         | 10        | 1       | completed           | 2013-10-01 |
| 2  | 2         | 11        | 1       | cancelled_by_driver | 2013-10-01 |
| 3  | 3         | 12        | 6       | completed           | 2013-10-01 |
| 4  | 4         | 13        | 6       | cancelled_by_client | 2013-10-01 |
| 5  | 1         | 10        | 1       | completed           | 2013-10-02 |
| 6  | 2         | 11        | 6       | completed           | 2013-10-02 |
| 7  | 3         | 12        | 6       | completed           | 2013-10-02 |
| 8  | 2         | 12        | 12      | completed           | 2013-10-03 |
| 9  | 3         | 10        | 12      | completed           | 2013-10-03 |
| 10 | 4         | 13        | 12      | cancelled_by_driver | 2013-10-03 |
+----+-----------+-----------+---------+---------------------+------------+
Users 表:
+----------+--------+--------+
| users_id | banned | role   |
+----------+--------+--------+
| 1        | No     | client |
| 2        | Yes    | client |
| 3        | No     | client |
| 4        | No     | client |
| 10       | No     | driver |
| 11       | No     | driver |
| 12       | No     | driver |
| 13       | No     | driver |
+----------+--------+--------+
输出:
+------------+-------------------+
| Day        | Cancellation Rate |
+------------+-------------------+
| 2013-10-01 | 0.33              |
| 2013-10-02 | 0.00              |
| 2013-10-03 | 0.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

数据准备:

Create table If Not Exists Trips (id int, client_id int, driver_id int, city_id int, status ENUM('completed', 'cancelled_by_driver', 'cancelled_by_client'), request_at varchar(50))

Create table If Not Exists Users (users_id int, banned varchar(50), role ENUM('client', 'driver', 'partner'))

Truncate table Trips

insert into Trips (id, client_id, driver_id, city_id, status, request_at) values ('1', '1', '10', '1', 'completed', '2013-10-01')

insert into Trips (id, client_id, driver_id, city_id, status, request_at) values ('2', '2', '11', '1', 'cancelled_by_driver', '2013-10-01')

insert into Trips (id, client_id, driver_id, city_id, status, request_at) values ('3', '3', '12', '6', 'completed', '2013-10-01')

insert into Trips (id, client_id, driver_id, city_id, status, request_at) values ('4', '4', '13', '6', 'cancelled_by_client', '2013-10-01')

insert into Trips (id, client_id, driver_id, city_id, status, request_at) values ('5', '1', '10', '1', 'completed', '2013-10-02')

insert into Trips (id, client_id, driver_id, city_id, status, request_at) values ('6', '2', '11', '6', 'completed', '2013-10-02')

insert into Trips (id, client_id, driver_id, city_id, status, request_at) values ('7', '3', '12', '6', 'completed', '2013-10-02')

insert into Trips (id, client_id, driver_id, city_id, status, request_at) values ('8', '2', '12', '12', 'completed', '2013-10-03')

insert into Trips (id, client_id, driver_id, city_id, status, request_at) values ('9', '3', '10', '12', 'completed', '2013-10-03')

insert into Trips (id, client_id, driver_id, city_id, status, request_at) values ('10', '4', '13', '12', 'cancelled_by_driver', '2013-10-03')

Truncate table Users

insert into Users (users_id, banned, role) values ('1', 'No', 'client')

insert into Users (users_id, banned, role) values ('2', 'Yes', 'client')

insert into Users (users_id, banned, role) values ('3', 'No', 'client')

insert into Users (users_id, banned, role) values ('4', 'No', 'client')

insert into Users (users_id, banned, role) values ('10', 'No', 'driver')

insert into Users (users_id, banned, role) values ('11', 'No', 'driver')

insert into Users (users_id, banned, role) values ('12', 'No', 'driver')

insert into Users (users_id, banned, role) values ('13', 'No', 'driver')

分析:

①观察trip表需要client_id,driver_id,而这两个id在users表中,不妨分解一下users表

分解为只有client_id 数据的表t1 和只有driver_id数据的表t2

select * from users where role = 'client'
select * from users where role = 'driver'

②连接三张表,并进行相应的筛选,找到clent和driver的banned都为no的,以及相应日期的数据

select request_at,
       t1.users_id uid,
       t1.banned t1b,
       t2.users_id did,
       t2.banned t2b,
       status
from (select * from users where role = 'client') t1,
     (select * from users where role = 'driver') t2,
     trips
where Trips.client_id = t1.users_id
  and Trips.driver_id = t2.users_id
  and request_at between '2013-10-01' and '2013-10-03'
  and t1.banned = 'no'
  and t2.banned = 'no'

③然后通过对日期分类求出取消率

select request_at,
       round((count(if(status !='completed',1,null))/(count(1)) ),2)as 'Cancellation Rate'
       from t1
group by request_at;

代码:

with t1 as (
select request_at,
       t1.users_id uid,
       t1.banned t1b,
       t2.users_id did,
       t2.banned t2b,
       status
from (select * from users where role = 'client') t1,
     (select * from users where role = 'driver') t2,
     trips
where Trips.client_id = t1.users_id
  and Trips.driver_id = t2.users_id
  and request_at between '2013-10-01' and '2013-10-03'
  and t1.banned = 'no'
  and t2.banned = 'no')
select request_at,
       round((count(if(status !='completed',1,null))/(count(1)) ),2)as 'Cancellation Rate'
       from t1
group by request_at;

总结:

分解users表之后再进行连接会使题目迎刃而解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1992803.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EMF矢量图工具Graphpad Prism(棱镜科研绘图工具)

Graphpad Prism 是一款功能强大、专业实用的棱镜科研绘图软件,专为科研工作者而设计研发,可帮助用户进行专业便捷的科研图像绘制,通过该款软件用户可以进行新型子列图进行创建,可以进行平滑的线性图进行绘制,可以说是一…

【汉明距离总和】python刷题记录

R4-数与位篇 class Solution:def totalHammingDistance(self, nums: List[int]) -> int:#创建计数器trieCounter()max_bitlen(bin(max(nums)))-2ret0for i,num in enumerate(nums):for j in range(max_bit):#一位位地取出来bit(num>>j)&1if bit:reti-trie[j]trie[…

同态加密和SEAL库的介绍(一)简介

写在前面: 最近在做同态相关的内容,这里记录下相关的知识点和所踩过的坑,希望对大家有帮助。预计分几篇来详细介绍,从概念简介到不同模式介绍,具体包括了每种模式的编解码和加解密以及他们性能的比对。 虽然同…

MySQL 8.0新特性

文章目录 一. 账户与安全1. 查看用户信息2. 用户权限管理范围3. 用户创建和授权1) 创建并授权用户2)登录zhp,密码zhp.1221。验证数据库权限3)查看用户权限4)撤销用户权限5)用户重命名&修改密码6&#x…

端到端 AWS 定量分析:使用 AWS 和 AWSCLI 自动运行脚本

使用 AWSCLI 启动、运行和关闭 AWS 服务器 添加图片注释,不超过 140 字(可选) 欢迎来到雲闪世界。我们开发了两个 Python 脚本;一个用于为我们获取数据,另一个用于使用 sklearn 的决策树分类器处理数据。然后&#xf…

NAT、服务代理、内网穿透

文章目录 NAT技术NAT IP转换过程NATPNAT的优点NAT的缺点 代理服务器正向代理反向代理 内网穿透和内网打洞内网穿透内网穿透 NAT技术 NAT技术即网络地址转换技术。用于将私有IP地址转换为公共IP地址,以便在互联网或其他外部网络中通信。为了解决IPv4协议下IP地址不足…

【Nacos无压力源码领读】(三) Nacos 配置中心与热更新原理详解超详细解读

本文将从 Nacos 配置中心的基本使用入手, 详细介绍 Nacos 客户端发布配置, 拉取配置, 订阅配置的过程以及服务器对应的处理过程; 配置订阅以及热更新原理相关的部分, 我看了主流的博客网站, 绝对没有比这更详细的讲解; 如果在阅读过程中对文中提到的 SpringBoot 启动过程以及…

交叉编译nginx1.20.0

一、说明 简略写一下过程,仅用于参考,建议与其他交叉编译教程一起看,检查是否有遗漏的问题。 二、源码修改 1、auto/cc/name vi auto/cc/name 注释 21 行 exit 1。 2、auto/types/sizeof vi auto/types/sizeof 将 15 行处的” ngx_size”…

数字图像处理(理论篇)专栏介绍

专栏导读 数字图像处理是计算机视觉领域的基石,它涉及到图像的获取、表示、处理和分析等多个方面。本专栏将通过一系列精心挑选的实战案例,引导读者从基础概念到高级技术,逐步深入学习数字图像处理的各个方面。 专栏目录 数字图像处理 第一…

离线+树状数组,ABC253 F - Operations on a Matrix

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 F - Operations on a Matrix 二、解题报告 1、思路分析 我们通过差分树状数组,可以轻松解决操作1 操作3我们也可以通过树状数组来获取对应列的值 关键是操作2会对操作3造成影响 所以我们先对…

你了解堆和栈的由来吗?

人们提出内存中堆和栈这两个概念,肯定是要解决当时所遇到的问题,不会为了提出概念而提概念。堆和栈都是为了解决一些问题而发展出来的结果,并没有任何的高深之处。 要搞懂堆和栈的概念是如何来的,就需要从计算机诞生时说起了。 …

UE中的运行时Mesh - 学习笔记

UE中的运行时Mesh Runtime Mesh 广泛应用于仿真、游戏及医疗等相关应用领域。 运行时Mesh可以摆脱UE编辑器的依赖,独立开发相对独立的应用程序。 应用示例 地质领域: 模型编辑修改:膨胀 导入、材质设置、补洞及简化: mar…

【Java】韩顺平Java学习笔记 第23章 反射

文章目录 需求和快速入门反射原理反射相关主要类反射的优点和缺点及其优化Class类Class类常用方法获取Class类对象的六种方式有Class对象的类型 类加载动态加载和静态加载类加载时机类加载流程图类加载五个阶段加载阶段连接阶段-验证连接阶段-准备连接阶段-解析总结Initializat…

【Bug记录】operator->返回类型错误导致operator->调用不了

项目场景: 模拟list,出现operator->调用不了的情况,这是什么情况呢??? 问题描述 这里我是明确写了operator->函数的: 但是却有下面报错: 原因分析: 这里有…

python判断和循环语句

python判断语句 1、单个条件判断 if 条件:满足条件要做的事情1满足条件要做的事情2 else:不满足条件要做的事情3不满足条件要做的事情2 2、多个条件判断(满足条件1就不会判断条件2) else可以省略不写 if 条件1:满足条件1要做的事情a满足条件1要做的事…

JavaEE从入门到起飞 (三) ~AOP

晚上好,愿这深深的夜色给你带来安宁,让温馨的夜晚抚平你一天的疲惫,美好的梦想在这个寂静的夜晚悄悄成长。 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 了解面向切面编程(AOP&#xf…

牛客网每日刷题之 HJ99.自守数(C++)

在不断学习的过程中也不能忘记了基础知识的巩固,在学习新的知识后要学会去举一反三,前不久我刚刚了解了一些关于 string 类的知识,对牛客网的 自守数 有了新的解题思路,让我们一起看看这道题吧 思路解析 a. 整数方法 1. 首先我们知…

C++(2):λ表达式,类函数重载

λ表达式 [&]捕获前面所有 [i] j闭包函数内访问不了,在函数内i只能用不能改 [&I,j] i在函数内可改j不行 未捕获可以充当函数指针使用 new,delete和malloc,free区别 new会调构造函数 malloc不会,delete会调析构函数free不会malloc调用需要强转…

从混沌到秩序:一本书教你掌握互联网内容审核与信息安全的密钥

随着互联网技术的迅猛发展,视频、图片、文字等多媒体内容以前所未有的速度在全球范围内传播与分享,极大地丰富了人们的信息获取渠道和娱乐生活方式。然而,这一繁荣景象背后,也隐藏着内容安全、版权侵犯、虚假信息传播、不良内容泛…

公司邮箱办理流程复杂吗?三步快速开通公司邮箱

对于许多企业而言, 开通公司邮箱是一项重要的基础建设工作。但是, 很多企业主可能会担心这一过程是否过于繁琐。实际上, 只需要注册、设置域名和邮箱, 以及开始使用这三个步骤。本文将为您介绍如何通过Zoho邮箱快速完成公司邮箱的开通。 Zoho邮箱因其卓越的服务质量和可靠性, …