MySQL做数据统计SQL语句整理大全(原理+实战)

🎨领域:Java后端开发



在这里插入图片描述


🔥收录专栏: MySQL原理与实战
🐒个人主页:BreezAm
💖Gitee:https://gitee.com/BreezAm
✨个人标签:【后端】【大数据】【前端】【运维】

文章目录

    • 💖介绍
      • 🌳一、前置知识
        • 🌲1.1 date_sub() 函数
        • 🌲1.2 now() 函数
        • 🌲1.3 date_format() 函数
        • 🌲1.4 date()、year()、month()、day()、quarter() 函数
        • 🌲1.5 ifnull() 函数
        • 🌲1.6 curdate()
        • 🌲1.7 datediff() 函数
        • 🌲1.8 date_add() 函数
        • 🌲1.9 curtime() 函数
      • 🌳二、实战
        • 🌲2.1 统计7天前的数据
        • 🌲2.2 统计最近7天每天有多少数据量
        • 🌲2.3 统计最近7天每天有多少数据量,没有用0填充
        • 🌲2.4 统计昨天的记录总数
        • 🌲2.5 统计当天的记录总数
        • 🌲2.6 统计两个时间段内的每天记录数(传入两个日期)
      • 💖总结
    • 💖参考文献

💖介绍

先发一张大屏展示图。
在这里插入图片描述


在这里插入图片描述

🌳一、前置知识

🌲1.1 date_sub() 函数

date_sub() 函数的作用是从某一日期减去指定的时间间隔后得到的日期,语法如下:

date_sub(date,INTERVAL expr type)

参数介绍:

  • date 参数是合法的日期表达式
  • expr 参数是您希望添加的时间间隔
  • type可以是:year、month、week、day、hour、second,查看更多>

举例:

  • 注意:看下面的列子前,请先记得我测试时的日期是:2022-05-13!!!。
  • curdate()函数用于获取当前的日期,下面会详细介绍。

例子1:获取间隔两周的日期:

select DATE_SUB(curdate(),INTERVAL 2 week) as '日期'

运行如下图所示:
在这里插入图片描述
例子2:获取间隔7天的日期:

select DATE_SUB(curdate(),INTERVAL 7 day) as '日期'

在这里插入图片描述

例子3:获取间隔1年的日期:

select DATE_SUB(curdate(),INTERVAL 1 year) as '日期'

运行如下图所示:
在这里插入图片描述


🌲1.2 now() 函数

now()函数返回的是当前的日期和时间,例子如下:

select now() as '当前时间'

运行结果如下图所示,注意获取到的日期时间格式
在这里插入图片描述

🌲1.3 date_format() 函数

date_format() 函数用于以不同的格式显示日期/时间数据,语法如下:

date_format(date,format)

参数:

  • date:一个日期/时间字符串
  • format:日期/时间的输出格式,format的格式常用的有如下几个:

在这里插入图片描述
🐒例子1:格式化日期时间(格式1):

select DATE_FORMAT('2022-05-13 12:48:39','%Y/%m/%d %H:%i:%s') as '日期'

运行结果如下图所示:
在这里插入图片描述
🐒例子2:格式化日期时间(格式2):

select DATE_FORMAT('2022-05-13 12:48:39','%Y-%m-%d %H:%i:%s') as '日期'

运行结果如下图所示:
在这里插入图片描述
🐒例子3:格式化时间(格式1):

select DATE_FORMAT('2022-05-13 12:48:39','%T') as '当前时间'

运行结果如下图所示:
在这里插入图片描述
🐒例子4:格式化时间(格式2):

select DATE_FORMAT('2022-05-13 12:48:39','%H:%i:%s') as '时间'

运行结果如下图所示:
在这里插入图片描述


🌲1.4 date()、year()、month()、day()、quarter() 函数

date()函数的作用是用于提取日期时间中的日期部分,语法如下:

date(datetime_str)

参数:

  • datetime_str:表示一个含有日期时间字符串。
    例子如下:
select date('2022-05-13 12:01:31') as '日期'

运行如下图所示:
在这里插入图片描述
除此之外还有几个与date()相似的函数,如下所示:

  • year(date):截取
  • month(date):截取
  • day(date):截取
  • quarter(date):截取季度

例子如下:

SELECTDAY( '2022-05-13 12:01:31' ) '日',MONTH ( '2022-05-13 12:01:31' ) '月',QUARTER ( '2022-05-13 12:01:31' ) '季度',YEAR ( '2022-05-13 12:01:31' ) '年'

运行如下图所示:
在这里插入图片描述


🌲1.5 ifnull() 函数

ifnull() 函数的的语法如下:

ifnull(v1,v2)

他的含义是如果v1参数为NULL就返回v2,如果v1参数不为NULL,就将v1返回,这个函数在数据统计中具有很大的用处,例子如下:

select ifnull(NULL,0) as '返回值'

运行如下图所示:
在这里插入图片描述


🌲1.6 curdate()

curdate()函数用于获取当前的日期,例子如下:

select curdate() as '日期'

运行结果如下图所示,注意获取到的日期格式
在这里插入图片描述

🌲1.7 datediff() 函数

datediff() 函数用于返回两个日期之间的天数,语法如下:

datediff(date1,date2)

🐒例子如下:

select datediff('2022-05-13 12:48:39','2022-05-11 11:20:39') as '相差天数'

运行结果如下图所示:
在这里插入图片描述


🌲1.8 date_add() 函数

date_add() 函数的作用是向日期添加指定的时间间隔,语法如下:

date_add(date,INTERVAL expr type)

注:参数和上文介绍的date_format()函数一样。

🐒例子:将日期向后添加45天。

SELECT  DATE_ADD('2022-05-13 12:48:39',INTERVAL 45 DAY) AS '日期'

运行结果如下图所示:
在这里插入图片描述


🌲1.9 curtime() 函数

该函数的作用是返回当前的时间,例子如下:

select curtime() as '当前时间'

运行结果如下图所示:
在这里插入图片描述

三个获取当前日期、时间函数的对比,例子如下:

SELECT NOW() as '当前日期时间',CURDATE() as '当前日期',CURTIME() as '当前时间'

运行结果如下图所示:
在这里插入图片描述

🌳二、实战

  在上一节中介绍完了使用MySQL做数据统计时常用的一些函数,本节将介绍一些开发中常见的数据统计场景。

在开始之前先创建一张用户表用于测试,表语句如下:

CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(20) NOT NULL DEFAULT '',`create_time` datetime NOT NULL,`update_time` datetime DEFAULT NULL,`sort` int(11) NOT NULL DEFAULT '0',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4;

往里面插入一些测试数据,结果如下图所示:
在这里插入图片描述

🌲2.1 统计7天前的数据

统计七天前的数据并且按照创建日期降序排列。

SELECT* 
FROMUSER 
WHEREDATE_SUB( CURDATE(), INTERVAL 7 DAY ) <= date( create_time ) 
ORDER BYcreate_time DESC

运行结果如下图所示:
在这里插入图片描述
:以上是统计7天前的,可以按照自己的需求改变,比如一个月前、一年前、一周前等等。

🌲2.2 统计最近7天每天有多少数据量

SELECTdate_format( create_time, '%Y-%m-%d' ) AS '日期',count( 1 ) AS '数量' 
FROMuser
WHEREcreate_time >= date(now()) - INTERVAL 7 DAY 
GROUP BYDAY ( create_time );

运行结果如下图所示:
在这里插入图片描述

🌲2.3 统计最近7天每天有多少数据量,没有用0填充

SELECTa.date,IFNULL( b.count, 0 ) AS count 
FROM(SELECTCURDATE() AS date UNION ALLSELECTDATE_SUB( CURDATE(), INTERVAL 1 DAY ) AS date UNION ALLSELECTDATE_SUB( CURDATE(), INTERVAL 2 DAY ) AS date UNION ALLSELECTDATE_SUB( CURDATE(), INTERVAL 3 DAY ) AS date UNION ALLSELECTDATE_SUB( CURDATE(), INTERVAL 4 DAY ) AS date UNION ALLSELECTDATE_SUB( CURDATE(), INTERVAL 5 DAY ) AS date UNION ALLSELECTDATE_SUB( CURDATE(), INTERVAL 6 DAY ) AS date ) aLEFT JOIN (SELECTdate_format( create_time, '%Y-%m-%d' ) AS date,count( 1 ) AS count FROMUSER WHEREcreate_time >= date(now()) - INTERVAL 7 DAY GROUP BYDAY ( create_time ) ) b ON a.date = b.date 
ORDER BYa.date DESC

运行结果如下图所示:
在这里插入图片描述

🌲2.4 统计昨天的记录总数

SELECTcount( 1 ) AS '数量',date( create_time ) AS '日期' 
FROMUSER 
WHEREdate( create_time )= date_sub( curdate(), INTERVAL 1 DAY )

运行结果如下图所示:
在这里插入图片描述

🌲2.5 统计当天的记录总数

SELECTcount( 1 ) AS '数量',curdate() AS '日期' 
FROMUSER 
WHEREdate( create_time )= curdate()

运行结果如下图所示:
在这里插入图片描述

🌲2.6 统计两个时间段内的每天记录数(传入两个日期)

特别注意:该SQL语句,如果时间段内没有数据时,不会显示任何记录,也就是没有数据不会用0填充。

SELECTdate_format( create_time, '%Y-%m-%d' ) AS '日期',count( 1 ) AS '数量' 
FROMUSER 
WHEREdate( create_time ) BETWEEN date( '2022-05-08 12:48:39' ) AND date( '2022-05-15 12:48:39' ) 
GROUP BYDAY ( create_time )

在这里插入图片描述
CSDN统计某个时间段内的数据,如下图所示:
在这里插入图片描述

持续更新中…

💖总结

在做数据统计时,函数发挥着巨大的作用,在本文中主要介绍了几个,在MySQL中还有很多的函数。

💖参考文献

  • [1] W3school

🔥收录专栏:MySQL原理与实战
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在一周内上线50个用户增长策略

在闲鱼用户增长业务上的实验 我们最先落地的业务是在用户增长上&#xff0c;闲鱼的用户增长业务有如下描述&#xff1a; 闲鱼的卖家都是普通小卖家&#xff0c;而非专业的B类商家。因此无法统一组织起来参加营销活动带来买家活跃。我们目前DAU已经突破到2000W&#xff0c;如何…

jstat gc各参数含义

参数说明S0C第一个幸存区的大小S1C第二个幸存区的大小S0U第一个幸存区的使用大小S1U第二个幸存区的使用大小EC伊甸园区的大小EU伊甸园区的使用大小OC老年代大小OU老年代使用大小MC方法区大小MU方法区使用大小CCSC压缩类空间大小CCSU压缩类空间使用大小YGC年轻代垃圾回收次数YGC…

MySQL用户如何构建实时数仓

依托数据库生态&#xff0c;AnalyticDB for MySQL可以给用户提供分析场景下的标准解决方案&#xff0c;尤其是在大数据和性能要求较高的情况下AnalyticDB for MySQL的价值可以更好的体现。 MySQL用户为什么要单独构建数据仓库 为什么要单独构建数据仓库&#xff0c;而不是直接…

138 张图带你 MySQL 入门!

作者 | cxuan来源 | Java建设者SQL 基础使用MySQL 是一种关系型数据库&#xff0c;说到关系&#xff0c;那么就离不开表与表之间的关系&#xff0c;而最能体现这种关系的其实就是我们接下来需要介绍的主角 SQL&#xff0c;SQL 的全称是 Structure Query Language &#xff0c;…

Centos/Red Hat6.8 安装、配置、启动Gitlab (内网环境)

文章目录一、软件和源准备1. Gitlab下载2. epel源下载二、环境配置2.1. 安装依赖项2.2. 安装epel源2.3. 安装Gitlab三、Gitlab和防火墙配置3.1. 设置external_url3.2. 重新加载配置3.3. 防火墙配置四、测试验证4.1. 浏览器访问Gitlab4.2. 重新设置密码4.3. Gitlab常用命令一、软…

Promise封装Ajax实现POST和GET请求

&#x1f3a8;领域&#xff1a;Java后端开发&#x1f525;收录专栏&#xff1a; 前端技术 &#x1f412;个人主页&#xff1a;BreezAm &#x1f496;Gitee&#xff1a;https://gitee.com/BreezAm ✨个人标签&#xff1a;【后端】【大数据】【前端】【运维】 文章目录介绍一、相…

轻松构建基于 Serverless 架构的弹性高可用视频处理系统

前言 随着计算机技术和 Internet 的日新月异&#xff0c;视频点播技术因其良好的人机交互性和流媒体传输技术倍受教育、娱乐等行业青睐&#xff0c;而在当前&#xff0c; 云计算平台厂商的产品线不断成熟完善&#xff0c; 如果想要搭建视频点播类应用&#xff0c;告别刀耕火种…

Centos/Red Hat6.8 安装、配置、启动Gitlab (内网环境)心得分享

文章目录一、Gitlab下载1. Gitlab官网下载二、分析思路2.1. 分析2.2. 代码托管平台2.3. 镜像站二、Gitlab 重新加载配置异常2.1. 异常现象2.2. 分析定位三、百度解决问题3.1. 百度类似异常3.2. 参考博文3.3. 解决方案3.4. 执行测试3.5. 结论四、官网issues 014.1. 找官网issues…

祝贺我的同事王坚当选院士!

刚刚&#xff0c; 收到一个激动人心的消息&#xff1a; 原文链接 本文为云栖社区原创内容&#xff0c;未经允许不得转载。

带你从零入门 Serverless | 一文详解 Serverless 架构模式

作者 | Hongqi 阿里云高级技术专家责编 | Carol来源 | Serverless本文整理自《Serverless 技术公开课》什么是 Serverless 架构&#xff1f;按照 CNCF 对 Serverless 计算的定义&#xff0c;Serverless 架构应该是采用 FaaS&#xff08;函数即服务&#xff09;和 BaaS&#xf…

端智能揭秘|促使双十一GMV大幅提升,手淘用了什么秘密武器?

作者|莫凌、桑杨、明依 出品|阿里巴巴新零售淘系技术部 导读&#xff1a;信息流作为手淘的一大流量入口&#xff0c;对手淘的浏览效率转化和流量分发起到至关重要的作用。在探索如何给用户推荐其喜欢的商品这条路上&#xff0c;我们首次将端计算大规模应用在手淘客户端&#xf…

bug:The selected directory is not a valid home for Go SDK

问题描述&#xff1a; 使用IDEA插件配置go开发环境无法选择已经安装配置好的SDK 当选择local中的SDK时&#xff0c;出现如下错误&#xff1a; The selected directory is not a valid home for Go SDK解决方案&#xff1a; 在自己的SDK目录C:\Program Files\Go\src\runtime\…

Dataphin的代码自动化能力如何助力商业决策

前言 随着大数据趋势的迅速增长&#xff0c;数据的重要性与日俱增&#xff0c;企业内看数据、用数据的诉求越来越强烈&#xff0c;其中最常见的就是各种经营报表数据&#xff1a; 老板每日早晨9点准时需要看到企业核心的经营数据&#xff0c;以便进行企业战略及方向决策 业务负…

Gitlab14.x 安装、配置、启动 (Centos/Red Hat7/8.x)

文章目录一、下载、安装、配置依赖1. 安装配置需要的依赖2. Gitlab下载3. 安装Gitlab4. 配置external_url5. 重新加载配置文件6. 查看服务状态7. 配置防火墙8. 浏览器验证9. 寻找密码信息10. 查看密码11. 重新登陆12. 修改密码13. 重新登陆14. Gitlab常用命令声明&#xff1a;C…

如何通过Dataphin构建数据中台新增100万用户?

欢迎来到数据中台小讲堂&#xff01;这一期我们来看看&#xff0c;作为阿里巴巴数据中台(OneData - OneModel、OneID、OneService)方法论的产品载体&#xff0c;Dataphin如何帮助传统零售企业实现数字化转型&#xff0c;并在短时间内新增100万用户&#xff1f; 传统营销的痛点…

真香!3个月0基础转型大厂数据分析师,他做对了什么?

年初的黑天鹅打乱了我的求职阵脚&#xff0c;专业不对口&#xff0c;无实习经验&#xff0c;在求职路上的竞争优势几乎为0&#xff0c;然而&#xff0c;开启自救模式后&#xff0c;我顺利成为了头条数据分析师&#xff0c;下面我就讲讲人生是怎么开挂的。随着人工智能普及&…

36氪联合阿里云,共同研制中小企业发展「催化剂」

互联网的“中场战事” 伴随着第一代原生互联网人进入中年&#xff0c;高速发展了20多年的互联网也开始进入了中场阶段。 现阶段的创新创业领域&#xff0c;商业逻辑已日渐清晰&#xff0c;标志性公司陆续出现&#xff0c;整个行业大家在争夺什么、竞争什么都已摆在眼前。 大…

如何在项目运行过程中动态修改邮箱发件人的配置信息

&#x1f3a8;领域&#xff1a;Java后端开发&#x1f525;收录专栏&#xff1a; 框架 &#x1f412;个人主页&#xff1a;BreezAm &#x1f496;Gitee&#xff1a;https://gitee.com/BreezAm ✨个人标签&#xff1a;【后端】【大数据】【前端】【运维】 文章目录业务场景场景分…

Centos/Red Hat7/8.x 安装、配置、启动Gitlab14.x (语言和主题配置)

接上一篇&#xff1a;Centos/Red Hat7/8.x 安装、配置、启动Gitlab14.x 文章目录1. 简体中文2. 个性化主题1. 简体中文 2. 个性化主题

Hive数据如何同步到MaxCompute之实践讲解

摘要&#xff1a;本次分享主要介绍 Hive数据如何迁移到MaxCompute。MMA&#xff08;MaxCompute Migration Assist&#xff09;是一款MaxCompute数据迁移工具&#xff0c;本文将为大家介绍MMA工具的功能、技术架构和实现原理&#xff0c;再通过实际操作MMA&#xff0c;演示将Hiv…