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

Leetcode 1651. Hopper 公司查询 III

1.题目基本信息

1.1.题目描述

表: 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” 表中存在。

编写一个解决方案,计算出从 2020 年 1 月至 3 月 至 2020 年 10 月至 12 月 的每三个月窗口的 average_ride_distance 和 average_ride_duration 。并将 average_ride_distance 和 average_ride_duration 四舍五入至 小数点后两位 。

通过将三个月的总 ride_distance 相加并除以 3 来计算 average_ride_distance 。average_ride_duration 的计算方法与此类似。

返回按 month 升序排列的结果表,其中 month 是起始月份的编号(一月为 1,二月为 2 …)。

1.2.题目地址

https://leetcode.cn/problems/hopper-company-queries-iii/description/

2.解题方法

2.1.解题思路

窗口函数

2.2.解题步骤

第一步,统计各个月份的总ride_distance和ride_duration

第二步,使用窗口函数计算当前和后两行的ride_distance和ride_duration的平均数

3.解题代码

sql代码

# Write your MySQL query statement below
# 知识点:窗口函数OVER (ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING)获取当前行和后两行的统计量,窗口函数OVER (ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)获取前两行和当前行的统计量
WITH RECURSIVE months AS (SELECT 1 month UNIONSELECT month + 1 AS month FROM months WHERE month <= 11
), T AS (# 第一步,统计各个月份的总ride_distance和ride_durationSELECT MONTH(requested_at) AS month, SUM(ride_distance) AS rd1, SUM(ride_duration) AS rd2FROM Rides LEFT JOIN AcceptedRides USING (ride_id)WHERE driver_id IS NOT NULL AND YEAR(requested_at) = 2020GROUP BY month
)
# 第二步,使用窗口函数计算当前和后两行的ride_distance和ride_duration的平均数
SELECT month, ROUND((SUM(rd1) OVER (ORDER BY month ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING)) / 3, 2) AS average_ride_distance, ROUND((SUM(rd2) OVER (ORDER BY month ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING)) / 3, 2) AS average_ride_duration
FROM (SELECT month, IFNULL(rd1, 0) AS rd1, IFNULL(rd2, 0) AS rd2FROM months LEFT JOIN T USING (month)
) AS t1
LIMIT 10

4.执行结果

相关文章:

  • 【NIPS 2024】Towards Robust Multimodal Sentiment Analysis with Incomplete Data
  • quill 富文本多张图片排序
  • 大语言模型的完整训练周期从0到1的体系化拆解
  • CS学习网站-geeksforgeeks介绍
  • 历年安徽大学保研上机真题
  • 原生php单元测试
  • Kafka 的日志清理策略:delete 和 compact
  • 决策引擎与规则引擎在交易所业务风控中的建设思路、架构设
  • 历年北京理工大学保研上机真题
  • 使用 Hyperlane 实现 WebSocket广播
  • MIT 6.S081 2020Lab5 lazy page allocation 个人全流程
  • 《技术择时,价值择股》速读笔记
  • [论文品鉴] DeepSeek V3 最新论文 之 MTP
  • 历年北京邮电大学保研上机真题
  • 嵌入式硬件篇---Ne555定时器
  • 私有知识库 Coco AI 实战(七):摄入本地 PDF 文件
  • WORD 转 PDF 工具:排版 / 图片 / 表格批量转换提升办公效率
  • 分布式缓存:ZSET → MGET 跨槽(cross‐slot)/ 并发 GET解决思路
  • Android自定义View学习总结
  • C51单片机学习笔记——矩阵按键
  • 宠物网站建设论文/2023搜索最多的关键词
  • 做任务挣钱的网站聚/广州网站优化步骤
  • 佛山网站建设4-win方维/营销策略范文
  • 群晖nda做网站/seo排名优化联系13火星软件
  • 专门做装修的网站/网络公司取什么名字好
  • 饿了吗外卖网站怎么做/google 网站推广