技术杂谈 | Mysql统计近30天的数据,无数据的填充0

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: Mysql统计近30天的数据,无数据的填充0

Mysql统计近30天的数据,无数据的填充0。 这个应该是我们在做统计分析的时候,经常遇到的一个需求。

先说一般的实现方式,就是按照日期进行分组,但是这样会有一个问题,如果数据库表中有一天没有数据,那么是统计不出来结果的。类似下图

2020-01-01  10
2020-01-03  20
2020-01-04  4

这个时候,我们发现,2020-01-02 这一天是没有数据的,我们希望没有数据的这一天得到也能返回日期,而对应的数据是0,期望如下:

2020-01-01  10
2020-01-02  0
2020-01-03  20
2020-01-04  4

这时候,单单group by就没办法实现了。

那应该怎么办呢?

一般情况就是我们应该先获取一个日期的虚拟表,把这30天的时间都列出来,然后用这个日期虚拟表再去关联我们的业务表,关联没数据的值设置为空即可,那么怎么得到近30天的日期的,给出sql实现方式

SELECT    @s := @s +1AS indexs,    DATE_FORMAT(DATE( DATE_SUB( CURRENT_DATE, INTERVAL @s DAY )),'%Y-%m-%d')AS dates 
FROM    mysql.help_topic,(SELECT @s :=-1) temp  #不想包含当天,@s:=0WHERE    @s <30ORDERBY    dates 
复制代码

运行得到的结果如下

image.png

当然可根据自己的需要进行排序,时间有了,接下来直接关联自己的业务表就可以了,给出demo:

SELECT  date_table.datesAS dateValue,  IFNULL( temp.count,0)AScountFROM(SELECT    @s := @s +1AS indexs,    DATE_FORMAT(DATE( DATE_SUB( CURRENT_DATE, INTERVAL @s DAY )),'%Y-%m-%d')AS dates 
FROM    mysql.help_topic,(SELECT @s :=0) temp 
WHERE    @s <30ORDERBY    dates 
) date_table
  LEFT JOIN(SELECT LEFT
( create_time,10)AS dateValue,count(*)AScountFROM    monitor_log_record t1 
WHERE    t1.log_type=1AND t1.error_type=1AND t1.project_id=1GROUPBY    LEFT ( create_time,10)) temp ON date_table.dates= temp.dateValueORDERBY  date_table.datesDESC复制代码

好了,记录一下,希望可以帮助到你。有帮助的话记得点赞收藏加关注,感谢!!


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
10天前
|
消息中间件 canal 关系型数据库
Maxwell:binlog 解析器,轻松同步 MySQL 数据
Maxwell:binlog 解析器,轻松同步 MySQL 数据
82 11
|
9天前
|
关系型数据库 MySQL 数据库
MySQL的语法涵盖了数据定义、数据操作、数据查询和数据控制等多个方面
MySQL的语法涵盖了数据定义、数据操作、数据查询和数据控制等多个方面
28 5
|
23小时前
|
关系型数据库 MySQL 数据库
MySQL技术深度解析:每次最大插入条数探秘
MySQL技术深度解析:每次最大插入条数探秘
5 0
|
23小时前
|
关系型数据库 MySQL 数据库管理
MySQL技术指南:如何更改数据字段的前几位数字
MySQL技术指南:如何更改数据字段的前几位数字
7 0
|
2天前
|
消息中间件 监控 关系型数据库
MySQL数据实时同步到Elasticsearch:技术深度解析与实践分享
在当今的数据驱动时代,实时数据同步成为许多应用系统的核心需求之一。MySQL作为关系型数据库的代表,以其强大的事务处理能力和数据完整性保障,广泛应用于各种业务场景中。然而,随着数据量的增长和查询复杂度的提升,单一依赖MySQL进行高效的数据检索和分析变得日益困难。这时,Elasticsearch(简称ES)以其卓越的搜索性能、灵活的数据模式以及强大的可扩展性,成为处理复杂查询需求的理想选择。本文将深入探讨MySQL数据实时同步到Elasticsearch的技术实现与最佳实践。
17 0
|
2天前
|
SQL 关系型数据库 MySQL
mysql批量插入数据 excutemany
mysql批量插入数据 excutemany
14 0
|
分布式计算 关系型数据库 MySQL
E-Mapreduce如何处理RDS的数据
目前网站的一些业务数据存在了数据库中,这些数据往往需要做进一步的分析,如:需要跟一些日志数据关联分析,或者需要进行一些如机器学习的分析。在阿里云上,目前E-Mapreduce可以满足这类进一步分析的需求。
4964 0
|
24天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
26天前
|
存储 SQL 关系型数据库
使用MySQL Workbench进行数据库备份
【9月更文挑战第13天】以下是使用MySQL Workbench进行数据库备份的步骤:启动软件后,通过“Database”菜单中的“管理连接”选项配置并选择要备份的数据库。随后,选择“数据导出”,确认导出的数据库及格式(推荐SQL格式),设置存储路径,点击“开始导出”。完成后,可在指定路径找到备份文件,建议定期备份并存储于安全位置。
192 11
|
1天前
|
SQL 关系型数据库 MySQL