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

【数据分析面试】10. 计算平均通勤时间(SQL:timestampdiff() 和datediff()区别)

在这里插入图片描述

题目

假设你在Uber工作。rides表包含了关于Uber用户在美国各地的行程信息。

编写一个查询,以获取纽约(NY)每位通勤者的平均通勤时间(以分钟为单位),以及纽约所有通勤者的平均通勤时间(以分钟为单位)。

示例:

输入:

rides

列名类型
idINTEGER
commuter_idINTEGER
start_dtDATETIME
end_dtDATETIME
cityVARCHAR

输出:

列名类型
commuter_idINTEGER
avg_commuter_timeFLOAT
avg_timeFLOAT

结果显示如下:

commuter_idavg_commuter_timeavg_time
112745
229745
331145

答案

解题思路

一般思路是,先计算纽约的平均通勤时间,然后再计算个人的,最后把结果汇总在一起。
其实,直接用窗口函数可以直接得出结果。

答案代码

下面是直接用一个窗口函数,完成对每个ID的平均值计算。

SELECT DISTINCTcommuter_id,FLOOR(AVG(TIMESTAMPDIFF(MINUTE,start_dt,end_dt)) OVER (PARTITION BY commuter_id)) avg_commuter_time,FLOOR(AVG(TIMESTAMPDIFF(MINUTE,start_dt,end_dt)) OVER ()) avg_time
FROM rides
WHERE city = 'NY'
  • FLOOR(): 用于向下取整,将平均值舍入到最接近的整数。
  • TIMESTAMPDIFF(): 用于计算两个时间戳之间的差值,单位为分钟。
  • AVG( ) OVER (PARTITION BY commuter_id): 用于对每个commuter_id进行分组,并计算每个分组的平均值。
  • AVG() OVER ():OVER ()`表示在整个数据集上进行计算

计算时间差的函数

TIMESTAMPDIFF()
TIMESTAMPDIFF(unit, start_datetime, end_datetime) 是一个用于计算两个日期时间之间差异的 MySQL 函数。它接受三个参数:时间单位、起始日期时间和结束日期时间。

在我们的答案中就用了TIMESTAMPDIFF(MINUTE, start_dt, end_dt)

TIMESTAMPDIFF` 函数的时间单位参数可以是以下之一:

  • MICROSECOND: 微秒
  • SECOND: 秒
  • MINUTE: 分钟
  • HOUR: 小时
  • DAY: 天
  • WEEK: 周
  • MONTH: 月
  • QUARTER: 季度
  • YEAR: 年

DATEDIFF()
DATEDIFF(date1, date2): 这个函数返回两个日期之间的天数差异。它接受两个日期参数,并返回 date2 减去 date1 的天数差异。

TIMESTAMPDIFF() 可以用来计算date 格式吗?
TIMESTAMPDIFF() 函数通常用于计算两个日期时间之间的差异,因此它的参数通常是 DATETIMETIMESTAMP 类型的数据。虽然可以接受 DATE 类型的数据作为参数,但是在处理时会将 DATE 类型的数据隐式转换为 DATETIME 类型,并将时间部分视为零值。

举个例子,如果你要计算两个日期之间的差异:
SELECT TIMESTAMPDIFF(DAY, '2022-01-01', '2022-01-05');

这将返回 4,表示 ‘2022-01-01’ 到 ‘2022-01-05’ 之间相隔 4 天。

虽然 TIMESTAMPDIFF() 可以处理 DATE 类型的参数,但是如果只是想计算日期之间的天数差异,使用 DATEDIFF() 更为简单和直观。
在这里插入图片描述

http://www.lryc.cn/news/334654.html

相关文章:

  • 2024年150道高频Java面试题(二十二)
  • 如何使用校园网——Win10笔记本,台式机互开热点
  • c#:简洁实现if-else语句
  • 金融贷款批准预测项目
  • FR中隐藏系统管理--用户管理中 表格中每条数据中的编辑按钮,删除按钮
  • 函数重载和引用【C++】
  • rust-tokio发布考古
  • 3D医疗图像配准 | 基于Vision-Transformer+Pytorch实现的3D医疗图像配准算法
  • 设计模式(18):状态模式
  • 如果用大模型考公,kimi、通义千问谁能考高分?
  • 如何在Java中创建对象输入流
  • Vue 打包或运行时报错Error: error:0308010C
  • 222222222222222222222222
  • 微信小程序 电影院售票选座票务系统5w7l6
  • C#:用定时器监控定时器,实现中止定时器正在执行的任务,并重启
  • 计算机组成原理 — CPU 的结构和功能
  • npm包安装与管理:深入解析命令行工具的全方位操作指南,涵盖脚本执行与包发布流程
  • 序列化结构(protobuf)实现一个TCP服务器(C++)
  • Python中的list()和map() 用法
  • 公网环境下如何端口映射?
  • 7-36 输入年份和月份
  • Linux C++ 023-类模板
  • Android图形显示架构概览
  • 算法学习17:背包问题(动态规划)
  • axios-mock-adapter使用
  • 基于单片机的家用无线火灾报警系统设计
  • LangChain:索引(Indexes)--基础知识
  • Cortex-M4架构
  • 对称排序(蓝桥杯)
  • React - 你使用过高阶组件吗