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 06 MySQL
MySQL优化之如何写出高质量sql语句
May 17 MySQL
MySQL Router实现MySQL的读写分离的方法
May 27 MySQL
MySQL库表名大小写的选择
Jun 05 MySQL
为什么MySQL分页用limit会越来越慢
Jul 25 MySQL
MySQL中几种插入和批量语句实例详解
Sep 14 MySQL
一次MySQL启动导致的事故实战记录
Sep 15 MySQL
Mysql binlog日志文件过大的解决
Oct 05 MySQL
面试提问mysql一张表到底能存多少数据
Mar 13 MySQL
浅谈redis的过期时间设置和过期删除机制
Mar 18 MySQL
MySQL 字符集 character
May 04 MySQL
mysql性能优化以及配置连接参数设置
May 06 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与javascript对多项选择的处理
2006/10/09 PHP
一个PHP的String类代码
2010/04/20 PHP
php session安全问题分析
2011/06/24 PHP
PHP中Session引起的脚本阻塞问题解决办法
2014/04/08 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
php正则表达式使用方法整理集合
2020/01/31 PHP
30分钟就入门的正则表达式基础教程
2013/02/25 Javascript
GRID拖拽行的实例代码
2013/07/18 Javascript
点击弹出层效果&弹出窗口后网页背景变暗效果的实现代码
2014/02/10 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
2014/08/15 Javascript
浅谈JS闭包中的循环绑定处理程序
2014/11/09 Javascript
jQuery获取字符串中出现最多的数
2016/02/22 Javascript
ECMAScript6 新特性范例大全
2017/03/24 Javascript
Vue CLI3 如何支持less的方法示例
2018/08/29 Javascript
Vue+ElementUI使用vue-pdf实现预览功能
2019/11/26 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
js实现简单抽奖功能
2020/11/24 Javascript
[56:56]VG vs LGD 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
[03:18]【TI9纪实】社区大触GL与木木
2019/08/25 DOTA
举例讲解Python中装饰器的用法
2015/04/27 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
2019/08/23 Python
Django跨域资源共享问题(推荐)
2020/03/09 Python
CSS3实现的闪烁跳跃进度条示例(附源码)
2013/08/19 HTML / CSS
利用CSS3实现的文字定时向上滚动
2016/08/29 HTML / CSS
HTML5 实现一个访问本地文件的实例
2012/12/13 HTML / CSS
如何让IE9以下版本(ie6/7/8)认识html5元素
2013/04/01 HTML / CSS
美国折扣宠物药房:Total Pet Supply
2018/05/27 全球购物
社团文化节邀请函
2014/01/10 职场文书
拖鞋店创业计划书
2014/01/15 职场文书
事业单位辞职信范文
2014/01/19 职场文书
个人优缺点自我评价
2014/01/27 职场文书
绿色环保演讲稿
2014/05/10 职场文书
食品安全演讲稿
2014/09/01 职场文书
交通工程专业推荐信
2014/09/06 职场文书
发布会邀请函
2015/01/31 职场文书
白银帝国观后感
2015/06/17 职场文书