你会不会用mysql查询近7个月的数据?没有记录默认为空

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 你会不会用mysql查询近7个月的数据?没有记录默认为空

做报表统计的时候,常常需要在MySQL端用sql统计近7个月的数据,或者近7天的数据。

假如遇到当月没有数据,或者当天没有数据时,默认为0。


数据展示效果如下:


image.png


数据获取结果如下:

image.png



那么该如何获取这样的数据呢?


第一步,构造近7个月的日期数据


SELECT @rownum :=@rownum + 1 AS num,date_format(DATE_SUB(now(),INTERVAL @rownum MONTH),'%Y-%m') AS all_day FROM (SELECT @rownum := -1) AS r_init,(SELECT c.id FROM city c LIMIT 7) as c_init


数据获取结果如下:

image.png



解释一下:


@rownum是一个变量,随着c_init的表记录条数逐一递增。

(SELECT c.id FROM city c LIMIT 7) as c_init语句的limit来限制条数,需要7个月就为7。注意city是一个常量表,只要其条数大于7即可。limit 7 非常关键。

date_format(DATE_SUB(now(),INTERVAL @rownum MONTH),'%Y-%m') AS all_day语句,从现在开始,往后推7个月。

第二步,LEFT JOIN 你的数据表


SELECT convert(t2.all_day, char) all_day,COALESCE(SUM(o.good_amount), 0) AS good_amount,COALESCE(SUM(o.order_count), 0) AS good_count,t2.num FROM (SELECT @rownum :=@rownum + 1 AS num,date_format(DATE_SUB(now(),INTERVAL @rownum MONTH),'%Y-%m') AS all_day FROM (SELECT @rownum := -1) AS r_init,(SELECT c.id FROM city c LIMIT 7) as c_init) t2 LEFT JOIN ym_good_orders o ON (CONVERT(FROM_UNIXTIME(o.order_time / 1000, '%Y-%m'), CHAR)=t2.all_day AND o.good_uid=25 and o.is_delete=0) GROUP BY t2.all_day;


有了7条日期记录,那么就可以使用left join把你想要的数据加载过来。


比如我这条sql语句中需要成交额good_amount,需要交易笔数good_count。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
11天前
|
关系型数据库 MySQL 数据库
ORM对mysql数据库中数据进行操作报错解决
ORM对mysql数据库中数据进行操作报错解决
35 2
|
11天前
|
SQL 关系型数据库 MySQL
MySQL如何排查和删除重复数据
该文章介绍了在MySQL中如何排查和删除重复数据的方法,包括通过组合字段生成唯一标识符以及使用子查询和聚合函数来定位并删除重复记录的具体步骤。
29 2
|
5天前
|
消息中间件 canal 关系型数据库
Maxwell:binlog 解析器,轻松同步 MySQL 数据
Maxwell:binlog 解析器,轻松同步 MySQL 数据
39 11
|
4天前
|
关系型数据库 MySQL 数据库
MySQL的语法涵盖了数据定义、数据操作、数据查询和数据控制等多个方面
MySQL的语法涵盖了数据定义、数据操作、数据查询和数据控制等多个方面
18 5
|
6天前
|
存储 关系型数据库 MySQL
MySQL索引失效及避免策略:优化查询性能的关键
MySQL索引失效及避免策略:优化查询性能的关键
27 3
|
8天前
|
关系型数据库 MySQL 数据库
MySQL 表的CRUD与复合查询
【9月更文挑战第26天】本文介绍了数据库操作中的 CRUD(创建、读取、更新、删除)基本操作及复合查询。创建操作使用 `INSERT INTO` 语句插入数据,支持单条和批量插入;读取操作使用 `SELECT` 语句查询数据,可进行基本查询、条件查询和排序查询;更新操作使用 `UPDATE` 语句修改数据;删除操作使用 `DELETE FROM` 语句删除数据。此外,还介绍了复合查询,包括连接查询(如内连接、左连接)和子查询,以及聚合函数与分组查询,并提供了示例代码。
|
11天前
|
关系型数据库 MySQL 数据库
Python MySQL查询返回字典类型数据的方法
通过使用 `mysql-connector-python`库并选择 `MySQLCursorDict`作为游标类型,您可以轻松地将MySQL查询结果以字典类型返回。这种方式提高了代码的可读性,使得数据操作更加直观和方便。上述步骤和示例代码展示了如何实现这一功能,希望对您的项目开发有所帮助。
37 4
|
11天前
|
关系型数据库 MySQL
mysql查询速度慢怎么解决?
mysql查询速度慢怎么解决?
32 2
|
10天前
|
关系型数据库 MySQL
mysql & clinkhouse之查询 行拼接
mysql & clinkhouse之查询 行拼接
mysql & clinkhouse之查询 行拼接
|
2天前
|
存储 关系型数据库 MySQL
MySQL中利用FIND_IN_SET进行包含查询的技巧
`FIND_IN_SET`提供了一种简便的方法来执行包含查询,尤其是当数据以逗号分隔的字符串形式存储时。虽然这个方法的性能可能不如使用专门的关系表,但在某些场景下,它提供了快速简便的解决方案。开发者应该根据具体的应用场景和性能要求,权衡其使用。
7 0
下一篇
无影云桌面