实战演练 | 在 MySQL 中计算每日平均日期或时间间隔
在先前的文章先前的文章中,我们使用 Navicat for SQL Server 将 SQL Server 中给定列的平均每日计数制成表格。在今天的后续文章中,我们将通过计算基于开始日期和结束日期列的每日平均日期或时间间隔来稍微提高难度系数。出于演示目的,我将使用 Navicat Premium 和 MySQL。
计算以日为单位的电影租借时间
在 Sakila 示例数据库的 rental 表中,有两个日期字段代表一个时间间隔:它们是租借日期和归还日期。无疑,这两个字段存储租借电影的日期时间以及归还电影的日期时间。
考虑到这一点,假设我们需要编写一个查询来显示每日电影租借的平均长度。第一步将是计算所有电影租借的时长。以下是在 Navicat 中查询的样子:
若要将 rental_date 从日期时间转换为纯日期,我们可以使用 DATE() 函数。它接受任何有效的日期或日期时间表达式。
日数可以使用 MySQL DATEDIFF() 函数计算。它返回两个日期或日期时间之间的日数。Navicat 提供的自动完成代码功能可以帮助我们使用 DATEDIFF() 函数。当你开始键入单词时,会出现一个弹出列表,其中包含有关模式、表或视图、列以及存储过程和函数的建议。以下是建议列表中的 DATEDIFF() 函数:
选择一个函数后,它会以可通过 TAB 键聚焦、颜色编码、输入参数的格式插入到代码中的光标位置,以便快速输入:
关于时间
对于较短的时间范围,可以使用 TIMEDIFF() 代替 DATEDIFF()。它返回以秒为单位的时差。对于更长的时间间隔,你可以将返回值除以 60 转换成分钟,再将返回值除以 60 转换成小时。
按日分组结果
下一步是按日分组结果。这可以通过 GROUP BY 子句完成。它使我们可以将诸如 COUNT() 和 AVG() 之类的聚合函数应用于每个 rental_date 的租用日数。以下是加入了 GROUP BY 子句的查询:
你会注意到,我将 avg_days_rented 舍入到小数点后一位。否则,我们将获得 4 个精度点,这对于我们的目的而言可能有点多!
总结
幸亏 MySQL 有许多日期或时间函数,基于开始和结束日期列来计算每日平均日期或时间间隔比以前容易得多。此外,Navicat 功能丰富的 SQL 编辑器为几乎所有数据库实体(包括模式、表、列以及函数和存储过程)提供自动完成代码功能,这能进一步简化查询编写。如果你对 Navicat Premium 感兴趣,可以免费试用 14 天!
往期回顾
相关文章
- Mysql授权允许远程访问解决Navicat for MySQL连接mysql提示客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端
- 华为云MySQL金融版正式商用,高可靠的金融级数据库来了
- 【工具】TPCC-MySQL 测试结果详解
- MySQL常用日期时间函数
- mysql load data infile的使用 和 SELECT into outfile备份数据库数据
- ef和mysql使用(一)
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)
- [转]分析MySQL数据类型的长度【mysql数据字段 中length和decimals的作用!熟悉mysql必看】
- CentOS下httpd下php 连接mysql 本机可以,外网报错Could not connect: Can't connect to MySQL server on '127.0.0.1' (13)2003 原因解析
- PDI(Kettle)的使用四 获取REST api数据并保存到mysql
- MySQL内核月报 2014.11-MySQL· 捉虫动态·SIGHUP 导致 binlog 写错
- MySQL · 答疑解惑 · 备库Seconds_Behind_Master计算
- Atitit postgresql data type 数据类型与mysql对应表 数据库常用数据类型 PostgreMysql 整数intgreterInt 小数numericFL
- 【全网最全】 |MySQL EXPLAIN 完全解读
- mysql事务 mysql事务回滚 MySQL事务死锁 如何解除死锁 资金出入账
- MySQL Study之--Mysql无法启动“mysql.host”
- 安全测试===Mysql 注入技巧学习 MySQL注入技巧(2)
- 【MySql】MySQL索引15连问(相信大家看完肯定会有帮助)
- Mycat启动正常但无法连接ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/lib/mysql