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死锁和分库分表问题详解
Apr 16 MySQL
mysql对于模糊查询like的一些汇总
May 09 MySQL
MySQL主从搭建(多主一从)的实现思路与步骤
May 13 MySQL
MySQL 使用事件(Events)完成计划任务
May 24 MySQL
MySQL大小写敏感的注意事项
May 24 MySQL
MySQL索引失效的典型案例
Jun 05 MySQL
mysql 数据插入优化方法之concurrent_insert
Jul 01 MySQL
为什么MySQL选择Repeatable Read作为默认隔离级别
Jul 26 MySQL
JMeter对MySQL数据库进行压力测试的实现步骤
Jan 22 MySQL
MySQL事务操作的四大特性以及并发事务问题
Apr 12 MySQL
mysql如何查询连续记录
May 11 MySQL
MySQL使用IF语句及用case语句对条件并结果进行判断 
Sep 23 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 多进程 解决难题
2009/06/22 PHP
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
使用php清除bom示例
2014/03/03 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
SUN的《AJAX与J2EE》全文译了
2007/02/23 Javascript
JavaScript代码应该放在HTML代码哪个位置比较好?
2014/10/16 Javascript
jQuery实现加入购物车飞入动画效果
2015/03/14 Javascript
Jquery时间轴特效(三种不同类型)
2015/11/02 Javascript
JavaScript蒙板(model)功能的简单实现代码
2016/08/04 Javascript
Node.js中常规的文件操作总结
2016/10/13 Javascript
Bootstrap中datetimepicker使用小结
2016/12/28 Javascript
微信小程序 选项卡的简单实例
2017/05/24 Javascript
karma+webpack搭建vue单元测试环境的方法示例
2018/05/24 Javascript
require.js 加载过程与使用方法介绍
2018/10/30 Javascript
详解如何使用node.js的开发框架express创建一个web应用
2018/12/20 Javascript
关于layui的动态图标不显示的解决方法
2019/09/04 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
vue使用video插件vue-video-player详解
2020/10/23 Javascript
[09:43]DOTA2每周TOP10 精彩击杀集锦vol.5
2014/06/25 DOTA
[00:16]热血竞技场
2019/03/06 DOTA
浅谈Python的垃圾回收机制
2016/12/17 Python
Python整型运算之布尔型、标准整型、长整型操作示例
2017/07/21 Python
浅谈pytorch和Numpy的区别以及相互转换方法
2018/07/26 Python
python 剪切移动文件的实现代码
2018/08/02 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
2019/06/12 Python
python随机生成大小写字母数字混合密码(仅20行代码)
2020/02/01 Python
Python3爬虫中关于Ajax分析方法的总结
2020/07/10 Python
python 指定源路径来解决import问题的操作
2021/03/04 Python
简单的HTML5初步入门教程
2015/09/29 HTML / CSS
浅谈HTML5新增和废弃的标签
2019/04/28 HTML / CSS
Alba Moda德国网上商店:意大利时尚女装销售
2016/11/14 全球购物
纽约手袋品牌:KARA
2018/03/18 全球购物
美国价格实惠的在线眼镜网站:Zeelool
2020/12/25 全球购物
工程地质勘察专业大学生求职信
2013/10/13 职场文书
安全生产投入制度
2014/01/29 职场文书
2014年党员自我评价材料
2014/09/22 职场文书