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 07 MySQL
Mysql服务添加 iptables防火墙策略的方案
Apr 29 MySQL
MySQL中连接查询和子查询的问题
Sep 04 MySQL
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
Jan 22 MySQL
MySQL之MyISAM存储引擎的非聚簇索引详解
Mar 03 MySQL
MySQL优化及索引解析
Mar 17 MySQL
MySQL学习之基础操作总结
Mar 19 MySQL
详解MySQL的主键查询为什么这么快
Apr 03 MySQL
MySQL数据库优化之通过索引解决SQL性能问题
Apr 10 MySQL
MySQL数据库之存储过程 procedure
Jun 16 MySQL
MySQL数据库表约束讲解
Jun 21 MySQL
MySQL 原理与优化之Limit 查询优化
Aug 14 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
PHPwind整合最土系统用户同步登录实现方法
2010/12/08 PHP
PHP 中检查或过滤IP地址的实现代码
2011/11/27 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
2017/07/03 PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
2019/03/07 PHP
关于Yii中模型场景的一些简单介绍
2019/09/22 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
formvalidator验证插件中有关ajax验证问题
2013/01/04 Javascript
js中return false(阻止)的用法
2013/08/14 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
2014/04/25 Javascript
JavaScript实现跨浏览器的添加及删除事件绑定函数实例
2015/08/04 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
2016/01/23 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
2016/06/20 Javascript
JSONP跨域请求
2017/03/02 Javascript
Node.js中看JavaScript的引用
2017/04/22 Javascript
javascript 数据存储的常用函数总结
2017/06/01 Javascript
vue项目中用cdn优化的方法
2018/01/03 Javascript
vue 标签属性数据绑定和拼接的实现方法
2018/05/17 Javascript
ES6基础之默认参数值
2019/02/21 Javascript
nodejs中实现用户注册路由功能
2019/05/20 NodeJs
详解基于Vue的支持数据双向绑定的select组件
2019/09/02 Javascript
使用Bootstrap做一个朝代历史表
2019/12/10 Javascript
基于vue3.0.1beta搭建仿京东的电商H5项目
2020/05/06 Javascript
对vuex中store和$store的区别说明
2020/07/24 Javascript
[10:21]2018DOTA2国际邀请赛寻真——Winstrike
2018/08/11 DOTA
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
2009/04/09 Python
python通过自定义isnumber函数判断字符串是否为数字的方法
2015/04/23 Python
在Python中使用正则表达式的方法
2015/08/13 Python
解决Python 使用h5py加载文件,看不到keys()的问题
2019/02/08 Python
Python3实现将一维数组按标准长度分隔为二维数组
2019/11/29 Python
python 实现简易的记事本
2020/11/30 Python
HTML5地理定位与第三方工具百度地图的应用
2016/11/17 HTML / CSS
实习生岗位职责
2014/04/12 职场文书
介绍信如何写
2015/01/31 职场文书
幼儿园母亲节活动总结
2015/02/10 职场文书
学生乘坐校车安全责任书
2015/05/11 职场文书
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
2021/04/27 Python