leetcode 1645 Hopper公司查询2(postgresql)

2024-09-05 08:20

本文主要是介绍leetcode 1645 Hopper公司查询2(postgresql),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

需求

表: Drivers

±------------±--------+
| Column Name | Type |
±------------±--------+
| driver_id | int |
| join_date | date |
±------------±--------+
driver_id是该表的主键。
该表的每一行均包含驾驶员的ID以及他们加入Hopper公司的日期。

表: Rides

±-------------±--------+
| Column Name | Type |
±-------------±--------+
| ride_id | int |
| user_id | int |
| requested_at | date |
±-------------±--------+
ride_id是该表的主键。
该表的每一行均包含行程ID(ride_id),用户ID(user_id)以及该行程的日期(requested_at)。
该表中可能有一些不被接受的乘车请求。

表: AcceptedRides

±--------------±--------+
| Column Name | Type |
±--------------±--------+
| ride_id | int |
| driver_id | int |
| ride_distance | int |
| ride_duration | int |
±--------------±--------+
ride_id是该表的主键。
该表的每一行都包含已接受的行程信息。
表中的行程信息都在“Rides”表中存在。

编写SQL查询以报告2020年每个月的工作驱动因素百分比(working_percentage),其中:

注意:如果一个月内可用驾驶员的数量为零,我们认为working_percentage为0。

返回按month升序排列的结果表,其中month是月份的编号(一月是1,二月是2,等等)。将working_percentage四舍五入至小数点后两位。

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

案例 1:

表 Drivers:
±----------±-----------+
| driver_id | join_date |
±----------±-----------+
| 10 | 2019-12-10 |
| 8 | 2020-1-13 |
| 5 | 2020-2-16 |
| 7 | 2020-3-8 |
| 4 | 2020-5-17 |
| 1 | 2020-10-24 |
| 6 | 2021-1-5 |
±----------±-----------+

表 Rides:
±--------±--------±-------------+
| ride_id | user_id | requested_at |
±--------±--------±-------------+
| 6 | 75 | 2019-12-9 |
| 1 | 54 | 2020-2-9 |
| 10 | 63 | 2020-3-4 |
| 19 | 39 | 2020-4-6 |
| 3 | 41 | 2020-6-3 |
| 13 | 52 | 2020-6-22 |
| 7 | 69 | 2020-7-16 |
| 17 | 70 | 2020-8-25 |
| 20 | 81 | 2020-11-2 |
| 5 | 57 | 2020-11-9 |
| 2 | 42 | 2020-12-9 |
| 11 | 68 | 2021-1-11 |
| 15 | 32 | 2021-1-17 |
| 12 | 11 | 2021-1-19 |
| 14 | 18 | 2021-1-27 |
±--------±--------±-------------+

表 AcceptedRides:
±--------±----------±--------------±--------------+
| ride_id | driver_id | ride_distance | ride_duration |
±--------±----------±--------------±--------------+
| 10 | 10 | 63 | 38 |
| 13 | 10 | 73 | 96 |
| 7 | 8 | 100 | 28 |
| 17 | 7 | 119 | 68 |
| 20 | 1 | 121 | 92 |
| 5 | 7 | 42 | 101 |
| 2 | 4 | 6 | 38 |
| 11 | 8 | 37 | 43 |
| 15 | 8 | 108 | 82 |
| 12 | 8 | 38 | 34 |
| 14 | 1 | 90 | 74 |
±--------±----------±--------------±--------------+

结果表:
±------±-------------------+
| month | working_percentage |
±------±-------------------+
| 1 | 0.00 |
| 2 | 0.00 |
| 3 | 25.00 |
| 4 | 0.00 |
| 5 | 0.00 |
| 6 | 20.00 |
| 7 | 20.00 |
| 8 | 20.00 |
| 9 | 0.00 |
| 10 | 0.00 |
| 11 | 33.33 |
| 12 | 16.67 |
±------±-------------------+

截至1月底 --> 2个活跃的驾驶员 (10, 8),无被接受的行程。百分比是0%。
截至2月底 --> 3个活跃的驾驶员 (10, 8, 5),无被接受的行程。百分比是0%。
截至3月底 --> 4个活跃的驾驶员 (10, 8, 5, 7),1个被接受的行程 (10)。百分比是 (1 / 4) * 100 = 25%。
截至4月底 --> 4个活跃的驾驶员 (10, 8, 5, 7),无被接受的行程。百分比是 0%。
截至5月底 --> 5个活跃的驾驶员 (10, 8, 5, 7, 4),无被接受的行程。百分比是 0%。
截至6月底 --> 5个活跃的驾驶员 (10, 8, 5, 7, 4),1个被接受的行程 (10)。 百分比是 (1 / 5) * 100 = 20%。
截至7月底 --> 5个活跃的驾驶员 (10, 8, 5, 7, 4),1个被接受的行程 (8)。百分比是 (1 / 5) * 100 = 20%。
截至8月底 --> 5个活跃的驾驶员 (10, 8, 5, 7, 4),1个被接受的行程 (7)。百分比是 (1 / 5) * 100 = 20%。
截至9月底 --> 5个活跃的驾驶员 (10, 8, 5, 7, 4),无被接受的行程。百分比是 0%。
截至10月底 --> 6个活跃的驾驶员 (10, 8, 5, 7, 4, 1) 无被接受的行程。百分比是 0%。
截至11月底 --> 6个活跃的驾驶员 (10, 8, 5, 7, 4, 1),2个被接受的行程 (1, 7)。百分比是 (2 / 6) * 100 = 33.33%。
截至12月底 --> 6个活跃的驾驶员 (10, 8, 5, 7, 4, 1),1个被接受的行程 (4)。百分比是 (1 / 6) * 100 = 16.67%。

输入

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

输出

with t1 as (SELECT to_char(generate_series(timestamp '2020-01-01', timestamp '2020-12-01', interval '1 month'),'YYYY-MM') AS month),t2 as (select *,to_char(join_date, 'YYYY-MM')                                   as date1,sum(1) over (rows between unbounded preceding and current row ) as rn1from Drivers),t3 as (select month, max(rn1) over (rows between unbounded preceding and current row ) as active_drivers, driver_idfrom t1left join t2on t1.month = t2.date1),t4 as (select to_char(requested_at, 'YYYY-MM') as date2, a.ride_idfrom rides rleft join acceptedrides a on r.ride_id = a.ride_id),t5 as (select month,count(ride_id) as cnt
from t1 left join t4
on t1.month=t4.date2
group by month
)
select substring(t3.month,6,7) as month,round(((cnt::float/active_drivers)*100)::numeric,2)::text as working_percentage
from t3 left join t5
on t3.month=t5.month
order by t3.month;

在这里插入图片描述

这篇关于leetcode 1645 Hopper公司查询2(postgresql)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138431

相关文章

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

PostgreSQL中rank()窗口函数实用指南与示例

《PostgreSQL中rank()窗口函数实用指南与示例》在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名... 目录一、rank()函数简介二、基础示例:部门内员工薪资排名示例数据排名查询三、高级应用示例1. 每

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

postgresql数据库基本操作及命令详解

《postgresql数据库基本操作及命令详解》本文介绍了PostgreSQL数据库的基础操作,包括连接、创建、查看数据库,表的增删改查、索引管理、备份恢复及退出命令,适用于数据库管理和开发实践,感兴... 目录1. 连接 PostgreSQL 数据库2. 创建数据库3. 查看当前数据库4. 查看所有数据库