详解Mysql日期格式并聚合统计示例

 更新时间:2023年04月23日 15:49:27   作者:往之不谏  
这篇文章主要为大家介绍了Mysql日期格式并聚合统计示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

介绍

在实际的开发中,我们通常需要对数据进行分组统计,而时间日期是一个常见的分组条件。在 MySQL 中,我们可以使用日期格式化的函数将日期转换成指定格式的字符串,然后按照需要的时间粒度进行分组统计。本文将介绍如何使用 MySQL 日期格式化并按天、周、月、年分组统计数据。

准备工作

在开始之前,我们需要先准备一张测试数据表,并插入一些数据,以便于我们后续的实验和测试。

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `created_at` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `test` (`name`, `created_at`) VALUES
('test1', '2022-01-01 00:00:00'),
('test2', '2022-01-02 00:00:00'),
('test3', '2022-01-02 12:00:00'),
('test4', '2022-01-03 00:00:00'),
('test5', '2022-01-07 00:00:00'),
('test6', '2022-01-08 00:00:00'),
('test7', '2022-01-09 00:00:00'),
('test8', '2022-01-10 00:00:00'),
('test9', '2022-01-14 00:00:00'),
('test10', '2022-01-15 00:00:00'),
('test11', '2022-01-16 00:00:00'),
('test12', '2022-01-17 00:00:00'),
('test13', '2022-02-01 00:00:00'),
('test14', '2022-02-02 00:00:00'),
('test15', '2022-02-03 00:00:00'),
('test16', '2022-03-01 00:00:00'),
('test17', '2022-03-02 00:00:00'),
('test18', '2022-03-03 00:00:00'),
('test19', '2022-04-01 00:00:00'),
('test20', '2022-04-02 00:00:00'),
('test21', '2022-04-03 00:00:00'),
('test22', '2022-05-01 00:00:00'),
('test23', '2022-05-02 00:00:00'),
('test24', '2022-05-03 00:00:00');

这里我们创建了一张名为 test 的测试表,包含三个字段 idnamecreated_at。其中 created_at 表示记录创建时间的日期时间类型字段。我们插入了一些测试数据,包括从 2022 年1月份到5月份的数据.

实现原理

当我们需要根据日期进行分组统计时,MySQL提供了很多内置的日期函数,如YEAR()、MONTH()、WEEK()、DAY()、HOUR()等等。这些函数能够根据日期对数据进行分组并统计相应的数量。

对于本需求,我们需要根据日期进行分组,并统计7天、4周和3个月的数据。因此,我们需要结合使用日期格式化和日期函数。

首先,我们需要将日期格式化成相应的格式。可以使用DATE_FORMAT()函数来实现,该函数接收两个参数:日期和格式化字符串。例如,我们可以将日期格式化成"yyyy-MM-dd"的格式,如下所示:

SELECT DATE_FORMAT(date_column, '%Y-%m-%d') AS formatted_date FROM table_name;

实际操作

按天统计

接下来,我们需要根据日期分组并统计数量。可以使用GROUP BY子句和相应的日期函数来实现。例如,我们可以根据日期分组统计每天的数量,如下所示:

SELECT DATE_FORMAT(date_column, '%Y-%m-%d') AS formatted_date, COUNT(*) AS count FROM table_name GROUP BY formatted_date;

按周统计

SELECT DATE_FORMAT(date_column, '%x-%v') AS formatted_week, COUNT(*) AS count FROM table_name GROUP BY formatted_week;

或者

SELECT CONCAT(YEAR(date_column), '-', WEEK(date_column)) AS formatted_week, COUNT(*) AS count FROM table_name GROUP BY formatted_week;`

按月统计

SELECT DATE_FORMAT(date_column, '%Y-%m-%d') AS formatted_month, COUNT(*) AS count FROM table_name GROUP BY formatted_month;

或者

SELECT CONCAT(YEAR(date_column), '-', MONTH(date_column)) AS formatted_month, COUNT(*) AS count FROM table_name GROUP BY formatted_month;

以上就是详解Mysql日期格式并聚合统计示例的详细内容,更多关于Mysql日期格式聚合统计的资料请关注脚本之家其它相关文章!

相关文章

  • 关于mysql查询字符集不匹配问题的解决方法

    关于mysql查询字符集不匹配问题的解决方法

    这篇文章主要给大家介绍了关于mysql查询字符集不匹配问题的解决方法,文中通过示例代码给大家介绍的非常详细,对同样遇到这个问题的朋友们具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-08-08
  • mysql中的事务重做日志(redo log)与回滚日志(undo log)

    mysql中的事务重做日志(redo log)与回滚日志(undo log)

    这篇文章主要介绍了mysql中的事务重做日志(redo log)与回滚日志(undo log),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 解决Can''t locate ExtUtils/MakeMaker.pm in @INC报错

    解决Can''t locate ExtUtils/MakeMaker.pm in @INC报错

    今天小编就为大家分享一篇关于解决Can't locate ExtUtils/MakeMaker.pm in @INC报错,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • mysql 触发器用法实例详解

    mysql 触发器用法实例详解

    这篇文章主要介绍了mysql 触发器用法实例详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • mysql 表索引的一些要点

    mysql 表索引的一些要点

    这篇文章主要介绍了mysql 表索引的一些注意事项,mysql默认优化不如sqlserver,所以需要优化,而一些成熟的cms为了利益,也不会帮大家数据库优化的很好,需要自己另外设置
    2013-11-11
  • mysql 5.7.17 以及workbench安装配置图文教程

    mysql 5.7.17 以及workbench安装配置图文教程

    这篇文章主要为大家详细介绍了mysql 5.7.17 以及workbench安装配置图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • MySQL中的日期时间类型与格式化方式

    MySQL中的日期时间类型与格式化方式

    这篇文章主要介绍了MySQL中的日期时间类型与格式化方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • MySQL超详细实现用户管理实例

    MySQL超详细实现用户管理实例

    MySQL 是一个多用户数据库,具有功能强大的访问控制系统,可以为不同用户指定不同权限。在前面的章节中我们使用的是 root 用户,该用户是超级管理员,拥有所有权限,包括创建用户、删除用户和修改用户密码等管理权限
    2022-06-06
  • mysql分区表学习之日期分区

    mysql分区表学习之日期分区

    这篇文章主要给大家介绍了关于mysql分区表学习之日期分区的相关资料,分区是一种表的设计模式,通俗地讲表分区是将一大表,根据条件分割成若干个小表,需要的朋友可以参考下
    2023-08-08
  • MySQL配置文件my.cnf与my.ini的区别

    MySQL配置文件my.cnf与my.ini的区别

    在使用MySQL时,我们需要对其进行配置,以满足我们的需求,本文主要介绍了MySQL配置文件my.cnf与my.ini的区别,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03

最新评论