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服务添加 iptables防火墙策略的方案
Apr 29 MySQL
解读MySQL的客户端和服务端协议
May 10 MySQL
详解MySQL集群搭建
May 26 MySQL
MySQL中使用or、in与union all在查询命令下的效率对比
May 26 MySQL
Navicat for MySQL的使用教程详解
May 27 MySQL
mysql 带多个条件的查询方式
Jun 05 MySQL
MySQL一些常用高级SQL语句
Jul 03 MySQL
Mysql数据库表中为什么有索引却没有提高查询速度
Feb 24 MySQL
MySQL派生表联表查询实战过程
Mar 20 MySQL
Linux系统下MySQL配置主从分离的步骤
Mar 21 MySQL
MySQL表锁、行锁、排它锁及共享锁的使用详解
Apr 02 MySQL
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
Apr 12 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不用正则采集速度探究总结
2008/03/24 PHP
thinkphp四种url访问方式详解
2014/11/28 PHP
php源码分析之DZX1.5加密解密函数authcode用法
2015/06/17 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
PHP Laravel 上传图片、文件等类封装
2017/08/16 PHP
javascript检查日期格式的函数[比较全]
2008/10/17 Javascript
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
Js表格万条数据瞬间加载实现代码
2014/02/20 Javascript
原生javascript模仿win8等待提示圆圈进度条
2014/04/24 Javascript
详解JavaScript设计模式开发中的桥接模式使用
2016/05/18 Javascript
前端框架Vue.js中Directive知识详解
2016/09/12 Javascript
AngulerJS学习之按需动态加载文件
2017/02/13 Javascript
原生js实现倒计时--2018
2017/02/21 Javascript
js指定步长实现单方向匀速运动
2017/07/17 Javascript
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
小程序从手动埋点到自动埋点的实现方法
2019/01/24 Javascript
微信小程序实现pdf、word等格式文件上传的方法
2019/09/10 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
2020/01/08 Javascript
Vue如何基于es6导入外部js文件
2020/05/15 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
基于javascript的无缝滚动动画1
2020/08/07 Javascript
分享15个最受欢迎的Python开源框架
2014/07/13 Python
详解Python设计模式编程中观察者模式与策略模式的运用
2016/03/02 Python
Python操作Access数据库基本步骤分析
2016/09/19 Python
Python 性能优化技巧总结
2016/11/01 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
2018/04/02 Python
python实现类之间的方法互相调用
2018/04/29 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
2018/10/31 Python
浅谈Python中eval的强大与危害
2019/03/13 Python
艺术应用与设计专业个人的自我评价
2013/11/19 职场文书
工程专业毕业生自荐信范文
2013/12/25 职场文书
经典团队口号
2014/06/06 职场文书
电子专业自荐信
2014/07/01 职场文书
中学社团活动总结
2015/05/07 职场文书
Go使用协程交替打印字符
2021/04/29 Golang
Linux下使用C语言代码搭建一个简单的HTTP服务器
2022/04/13 Servers