MySql按时,天,周,月进行数据统计


Posted in MySQL onAugust 14, 2022

前言

最近遇到一个统计的需求场景,针对db中的数据,看一下每天的数据量情况,由于DB中时间字段采用的是int存的时间戳,所以最开始想到的是直接对时间进行按天取整,然后再Group统计数据;

除此之外,使用DATE_FORMAT函数来处理可能是更简洁的方法了,下面分别介绍下两种方式

1. 时间取整方式

假设现在有一个user表,其中create_time 为 int类型的时间戳,此时我们需要统计每天的新增用户数,第一种方式就是将create_time转换为天为单位的整数,然后group分组之后计数即可

对应的sql如下;

select floor(create_time / 86400) as c, count(*) from `user` group by c

使用上面这种方式虽然可以统计出结果,但是显示并不友好,如上面这个c实际上是距离标准起始时间过去的天数;无法直观看到每天的数量情况

2. data_format方式

接下来再介绍一下根据日期格式化这个函数来实现数据统计

函数说明

这个函数通常接收两个参数,使用姿势形如

DATE_FORMAT(date,format)
  • date: 日期
  • format: 规定日期/时间的输出格式

注意上面的date,要求是日期格式,可我们现在的数据是int类型,怎么整?

先通过from_unixtime函数来转换为日期,然后再使用data_format来格式化分组,这样就可行了

比如按天统计的sql可以如下:

select date_format(from_unixtime(create_time), '%Y-%m-%d') today, count(*) as cnt from user group by today

返回结果形如:

today cnt
2022-07-02 6
2022-07-03 4
2022-07-04 4
2022-07-05 3
2022-07-06 2
2022-07-07 1

如果需要按周统计,也很方便,将format改成 %Y-%u

select date_format(from_unixtime(create_time), '%Y-%u') today, count(*) as cnt from user group by today

返回结果形如:

today cnt
2022-22 27
2022-23 52
2022-24 28
2022-25 33
2022-26 39
2022-27 10

同样按年统计,则将format改成%Y即可

下面给出format对应的取值说明:

格式 描述
%a 缩写星期名
%b 缩写月名
%c 月,数值
%D 带有英文前缀的月中的天
%d 月的天,数值(00-31)
%e 月的天,数值(0-31)
%f 微秒
%H 小时 (00-23)
%h 小时 (01-12)
%I 小时 (01-12)
%i 分钟,数值(00-59)
%j 年的天 (001-366)
%k 小时 (0-23)
%l 小时 (1-12)
%M 月名
%m 月,数值(00-12)
%p AM 或 PM
%r 时间,12-小时(hh:mm:ss AM 或 PM)
%S 秒(00-59)
%s 秒(00-59)
%T 时间 24-小时 (hh:mm:ss)
%U 周 (00-53) 星期日是一周的第一天
%u 周 (00-53) 星期一是一周的第一天
%V 周 (01-53) 星期日是一周的第一天,与 %X 使用
%v 周 (01-53) 星期一是一周的第一天,与 %x 使用
%W 星期名
%w 周的天 (0=星期日 6=星期六)
%X 年,其中的星期日是周的第一天,4 位,与 %V 使用
%x 年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y 年,4 位
%y 年,2 位

到此这篇关于MySql按时,天,周,月进行数据统计的文章就介绍到这了,更多相关MySql数据统计内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
教你解决往mysql数据库中存入汉字报错的方法
May 06 MySQL
MySQL 查询速度慢的原因
May 25 MySQL
MySQL 数据类型选择原则
May 27 MySQL
MySQL 四种连接和多表查询详解
Jul 16 MySQL
mysql事务对效率的影响分析总结
Oct 24 MySQL
MySQL对数据表已有表进行分区表的实现
Nov 01 MySQL
MySQL数据库中varchar类型的数字比较大小的方法
Nov 17 MySQL
mysql中varchar类型的日期进行比较、排序等操作的实现
Nov 17 MySQL
MySQL Server 层四个日志
Mar 31 MySQL
MySql重置root密码 --skip-grant-tables
Apr 11 MySQL
MySQL 数据库 增删查改、克隆、外键 等操作
May 11 MySQL
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
May 08 MySQL
MySQL中LAG()函数和LEAD()函数的使用
Aug 14 #MySQL
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
Aug 14 #MySQL
MySQL数据库查询之多表查询总结
Aug 05 #MySQL
分享很少见很有用的SQL功能CORRESPONDING
Aug 05 #MySQL
MySQL存储过程及语法详解
Aug 05 #MySQL
MySQL自定义函数及触发器
Aug 05 #MySQL
MySQL性能指标TPS+QPS+IOPS压测
Aug 05 #MySQL
You might like
php实现的http请求封装示例
2016/11/08 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
通过jQuery打造支持汉字,拼音,英文快速定位查询的超级select插件
2010/06/18 Javascript
jquery控制listbox中项的移动并排序的实现代码
2010/09/28 Javascript
jQuery UI的Dialog无法提交问题的解决方法
2011/01/11 Javascript
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
jquery获取table中的某行全部td的内容方法
2013/03/08 Javascript
web网页按比例显示图片实现原理及js代码
2013/08/09 Javascript
JavaScript的继承的封装介绍
2013/10/15 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
2015/11/15 Javascript
常用原生JS兼容性写法汇总
2016/04/27 Javascript
javascript 中事件冒泡和事件捕获机制的详解
2017/09/01 Javascript
通过vue提供的keep-alive减少对服务器的请求次数
2018/04/01 Javascript
JavaScript中引用vs复制示例详析
2018/12/06 Javascript
学习RxJS之JavaScript框架Cycle.js
2019/06/17 Javascript
JS实现给数组对象排序的方法分析
2019/06/24 Javascript
[54:45]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 Optic vs OG
2018/04/02 DOTA
python使用PyGame播放Midi和Mp3文件的方法
2015/04/24 Python
Python  pip安装lxml出错的问题解决办法
2017/02/10 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
2019/04/28 Python
Python实现字典按key或者value进行排序操作示例【sorted】
2019/05/03 Python
python批量处理txt文件的实例代码
2020/01/13 Python
Python文件操作模拟用户登陆代码实例
2020/06/09 Python
Python工程师必考的6个经典面试题
2020/06/28 Python
美国网上订购鲜花:FTD
2016/09/23 全球购物
介绍下static、final、abstract区别
2015/01/30 面试题
幼儿教育感言
2014/02/05 职场文书
国培远程培训感言
2014/03/08 职场文书
新闻传播专业求职信
2014/07/22 职场文书
党员民主评议个人总结
2014/10/20 职场文书
横店影视城导游词
2015/02/06 职场文书
2015年教师节慰问信
2015/03/23 职场文书
七年级作文之环保作文
2019/10/17 职场文书
MySQL数据库超时设置配置的方法实例
2021/10/15 MySQL
Android开发EditText禁止输入监听及InputFilter字符过滤
2022/06/10 Java/Android