力扣262 行程和用户

news2024/11/18 21:28:34

        如何计算特定时间段内非禁止用户的出租车行程取消率。这个问题可以通过SQL查询来解决,我们需要关联Trips表和Users表来筛选出符合条件的行程记录,并计算取消率。

目录

题目描述

思路整理

完整代码及解释


题目描述

表:Trips

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

表:Users

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

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

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

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

结果格式如下例所示。

示例 1:

输入: 
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

思路整理

  1. 数据筛选: 首先,我们需要从Trips表中筛选出在指定日期范围内的行程记录。
  2. 排除禁止用户: 然后,通过连接Users表来排除那些由被禁止的客户或司机发起的行程记录。
  3. 计算取消率: 接下来,我们将计算取消的行程数与总行程数的比例,其中总行程数仅包括未被禁止的用户的有效行程。
  4. 结果格式化: 最后,我们需要将取消率格式化为保留两位小数的形式,并按日期分组输出结果。

完整代码及解释

SELECT
    T.request_at AS Day,
    ROUND(
        SUM(CASE WHEN T.status IN ('cancelled_by_driver', 'cancelled_by_client') THEN 1 ELSE 0 END) /
        COUNT(T.id), 2
    ) AS 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
    T.request_at;
  • ROUND(SUM(CASE WHEN T.status IN ('cancelled_by_driver', 'cancelled_by_client') THEN 1 ELSE 0 END) / COUNT(T.id), 2): 这部分是计算取消率的核心,它首先判断每条行程记录是否为取消状态,如果是,则计数为1,否则为0。然后将取消的行程数除以总行程数,最后结果保留两位小数。
  • 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': 这条连接确保了只考虑那些未被禁止的司机。
  • T.request_at BETWEEN '2013-10-01' AND '2013-10-03': 这条语句筛选出了指定日期范围内的行程记录。
  • GROUP BY T.request_at: 最后,我们按照日期对结果进行分组,以便为每天计算一个取消率。

通过

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

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

相关文章

flutterrow换行,2024年最新Android面试点梳理

计划 以人为镜可以明得失, 看到了自己的不足就要针对性地做一些改变. 以下思路转变要切记: 1.核心思想, 从项目出发, 打牢基础, 逐步深入; 2.上班期间不再惦记其他知识的学习, 专心研究项目上需要的知识/碰见的问题, 否则只会三心二意, 项目上的技术点做不深入, 其他知识点也…

电子科技大学课程《计算机网络系统》(持续更新)

前言 本校的课程课时有所缩减,因此可能出现与你学习的课程有所减少的情况,因此对其他学校的同学更多的作为参考作用。本文章适合学生的期中期末考试,以及想要考研电子科技大学的同学,电子科技大学同学请先看附言。 第一章 计算…

数据结构-----再谈String,字符串常量池,String对象的创建、intern方法的作用

文章目录 1.字符串常量池1.1. 创建对象的思考2.2. 字符串常量池(StringTable)1.3. 再谈String对象创建1.4. intern方法 1.字符串常量池 1.1. 创建对象的思考 下面两种创建String对象的方式相同吗? public static void main(String[] args) {String s1 "hel…

HQL,SQL刷题,尚硅谷

目录 相关表数据: 题目及思路解析: 查询结果排序&分组指定条件 1、查询学生的总成绩并按照总成绩降序排序 2、按照如下格式显示学生的语文、数学、英语三科成绩,没有成绩的输出为0,按照学生的有效平均成绩降序显示 3、查询一…

IntelliJ IDEA 使用 spring Initializr 快速搭建 spring boot 项目遇到的坑

maven使用的是3.5.3 一、创建SpringBoot 二、项目创建成功,启动右键,没有run方法 三、在pom.xml上右键,将其添加为maven项目,然后发现Test模块报错 四、查看pom.xml文件,发现2.3.5Release版本变红,怀疑是版…

github-actions

文章目录 workflow触发器action市场contextsecrets 默认环境变量 workflow name: {{workflow name}} run-name: {{workflow runs name}}on: {{触发器}} #[push]env:{{定义workflow变量}}: valuejobs:{{job name}}:runs-on: {{运行机器}} #ubuntu-latestenv:{{定义job变量}}: v…

react使用@reduxjs/toolkit和react-redux实现store状态管理

一、概述 reduxjs/toolkit和react-redux是用于在React应用中管理全局状态的工具库 1、reduxjs/toolkit: reduxjs/toolkit是Redux官方推荐的工具库,是对 Redux 的二次封装,它提供了一些便捷的API和工具,帮助开发者更快速地编写R…

JavaWeb之 创建 Web项目,使用Tomcat 部署项目,使用 Maven 构建Web项目(一万八千字详解)

目录 前言3.1 Tomcat 简介3.1.1 什么是 Web服务器3.1.2 Tomcat 是什么3.1.3 小结 3.2 Tomcat 的基本使用3.2.1 下载 Tomcat3.2.2 安装 Tomcat3.2.3 卸载 Tomcat3.2.4 启动 Tomcat3.2.5 关闭 Tomcat3.2.6 配置 Tomcat3.2.7 在 Tomcat 中部署 Web项目 3.3 在 IDEA 中创建 Web 项目…

04 Opencv图像操作

文章目录 读写像素修改像素值Vec3b与Vec3F灰度图像增强获取图像通道bitwise_not 算子对图像非操作 读写像素 读一个GRAY像素点的像素值(CV_8UC1) Scalar intensity img.at(y, x); 或者 Scalar intensity img.at(Point(x, y)); 读一个RGB像素点的像素值…

Java图书管理系统---命令行

项目列表 Book包 Book类内包含book的基本属性 BookList类初始化图书列表并且提供图书的属性方法 User包 Administrator类 common类 operator包 功能接口 新增图书功能 借阅图书功能 删除图书功能 显示图书功能 查找图书功能 归还图书功能 结束释放资源功能 运行…

排序(1)

目录 1 排序的概念及其应用 1.1 排序的概念 1.2 排序的应用 1.3 常见的排序算法 2 直接插入排序 2.1 基本思想 2.2 基本思路 2.3 代码实现 2.4 时间复杂度 3 冒泡排序(回顾) 3.1 思路分析 3.2 时间复杂度 4 比较 1 排序的概念及其应用 1.…

[分类指标]准确率、精确率、召回率、F1值、ROC和AUC、MCC马修相关系数

准确率、精确率、召回率、F1值 定义: 1、准确率(Accuracy) 准确率是指分类正确的样本占总样本个数的比例。准确率是针对所有样本的统计量。它被定义为: 准确率能够清晰的判断我们模型的表现,但有一个严重的缺陷&…

双指针问题(Java编写)

日升时奋斗,日落时自省 目录 一、移动零 二、盛水最多的容器 三、快乐数 四、复写零 五、三数之和 六、有效三角形的个数 七、四数之和 一、移动零 题目来源:. - 力扣(LeetCode) 题目主要内容就是将数组中所有的零移动到…

解决VSCode 不能拖拽文件问题

给【以管理员身份运行次程序】关掉,不要打勾 至于为什么开启了管理员就不能拖拽了,我也不知道,我猜的: 这可能是因为在VSCode中,管理员权限可能会限制用户对文件的操作权限。管理员权限对于一些操作可能会有更严格的限…

【Vue3】全局组件,递归组件,动态组件,传送组件,缓存组件,异步组件等

组件使用 父子组件传参父传子模板上直接使用js里面使用ts组件里面泛型接收ts泛型里面设置默认值 子传父方式一,采用defineEmits方式二,采用ts的泛型 方式三,采用ref获取子组件内部暴露的数据和方法子组件先暴露父组件接收 全局组件发现有报错…

云原生精品资料合集(附下载)

云计算是产业数字化转型的关键基础设施,以基础设施资源为中心的云搬迁时代接近尾声,以应用价值为中心的云原生时代已经到,所以IT人员学习云原生正当时!最近跟各位大神征集了云原生的教程,行业报告和最佳实践,总有一款适…

【软考】UML中的图之通信图

目录 1. 说明2. 图示3. 特性4. 例题4.1 例题1 1. 说明 1.通信图强调收发消息的对象的结构组织2.早期版本叫做协作图3.通信图强调参加交互的对象和组织4.首先将参加交互的对象作为图的顶点,然后把连接这些对象的链表示为图的弧,最后用对象发送和接收的消…

『Linux从入门到精通』第 ㉑ 期 - 文件系统详解

文章目录 💐专栏导读💐文章导读🐧认识磁盘🐧逻辑抽象🐧文件系统🐦Block🐦Block Group🐔Block Group 的组成部分 🐦Superblock(超级区块)🐦Group Description(…

FRM模型十二:极值理论

目录 极值理论介绍GEVPOT 代码实现 极值理论介绍 在风险管理中,将事件分为高频高损、高频低损、低频高损、低频低损。其中低频高损是一种非常棘手的损失事件,常出现在市场大跌、金融体系崩溃、金融危机以及自然灾害等事件中。 由于很难给极端事件一个准…

如何解决局域网tcp延迟高来进行安全快速内外网传输呢?

在当今企业运营中,数据的快速流通变得至关重要,但局域网内的TCP延迟问题却成为了数据传输的障碍。本文旨在分析局域网TCP延迟的成因,并探讨几种企业数据传输的常见模式,以及如何为企业选择合适的传输策略,以确保数据在…