Mysql按照月份分组统计数据,当月无数据则填充0

目录

    • 起因
    • 实现
    • 结论

起因

最近有个需求需要在sql中实现获取近半年的统计数据,本来以为挺简单的,不过这个项目数据基本没有,在此情况下还要实现获取近半年的数据就没办法简单group by了

实现

#如果每个月都有数据的话是比较简单的
SELECT DATE_FORMAT(date, '%Y-%m') AS month, COUNT(*) AS number_of_invoices
FROM in_storeage_form
WHERE date BETWEEN DATE_SUB(CURDATE(), INTERVAL 6 MONTH) AND CURDATE()
GROUP BY month

不过这种方式可能会存在漏掉月份的情况
在这里插入图片描述

#如果要在补齐月份使用这种
SELECT DATE_FORMAT(date, '%Y-%m') AS month, COUNT(*) AS number_of_invoices
FROM in_storeage_form
WHERE date BETWEEN DATE_SUB(CURDATE(), INTERVAL 6 MONTH) AND CURDATE()
GROUP BY monthUNION ALLSELECT m.date as month,0 AS number_of_invoices
FROM ( SELECT DATE_FORMAT(CURDATE(), '%Y-%m') AS dateUNION ALLSELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m') dateUNION ALLSELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 2 MONTH), '%Y-%m') dateUNION ALLSELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 3 MONTH), '%Y-%m') dateUNION ALLSELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 4 MONTH), '%Y-%m') dateUNION ALLSELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 5 MONTH), '%Y-%m') date	) m
where not exists(SELECT DATE_FORMAT(f.date, '%Y-%m') AS dateFROM in_storeage_form fWHERE date BETWEEN DATE_SUB(CURDATE(), INTERVAL 6 MONTH) AND CURDATE()and  DATE_FORMAT(f.date, '%Y-%m') = m.dateGROUP BY date) 
order by month desc

在这里插入图片描述

结论

先通过普通的计算有数据的月份,在获取近6个月到底是哪几个月,通过这几个月去跟有数据的几个月做一个筛选,获取到没数据的那几个月,再去将没数据的那几个月设为0就OK了

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

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

相关文章

Request和Response对象

Request和Response都是Servlet的service方法的参数,Request负责获取请求数据,而Response负责设置相应数据~ 一.Request 1.继承体系 Tomcat负责解析数据,因此由Tomcat来提供实现类~ 2.获取请求数据 请求行 请求头 请求体 需要注意的是只有…

【方法】如何打开7Z分卷压缩文件?

什么是7Z分卷压缩文件?就是在压缩文件时,将文件压缩成若干个大小一样、以“文件名.7z.序号”格式命名的7Z压缩包,可以方便存储和传输,如下图所示。 一、7Z分卷压缩文件如何打开? 我们只需要按照普通压缩包的打开方式&…

C语言分析基础排序算法——插入排序

目录 插入排序 直接插入排序 希尔排序 希尔排序基本思路解析 希尔排序优化思路解析 完整希尔排序文件 插入排序 直接插入排序 所谓直接插入排序,即每插入一个数据和之前的数据进行大小比较,如果较大放置在后面,较小放置在前面&#x…

java面试常考问题_八股文

author:可以根据下面这些题查漏补缺 (1) 问题: 1. 会哪些开发语言 2. java集合中的ArrayList和LinkedList的实现原理 arraylist和linkedlist都实现了list接口 arraylist实现的底层逻辑是数组,适用于随机访问和查询 linkedlist…

带胶囊按钮的标题是如何实现的

使用uni-app开发小程序经常会遇到胶囊按钮和标题之间融合的问题,因为这样可以大大提高页面的美观和整体性,那么接下来简单拆分步骤看下是如何实现的吧 😁 可以看到我们设置的标题是在默认标题栏之下的(这不是我们想要的效果 &…

Python学习笔记-Flask实现简单的抽奖程序

1.导入flask包和randint包 from flask import Flask,render_template from random import randint 2.初始化 Flask 应用: app Flask(__name__) 3. 定义英雄列表 hero [黑暗之女,狂战士,正义巨像,卡牌大师,德邦总管,无畏战车,诡术妖姬,猩红收割者,远古恐惧,正义天使,无极剑…

【广度优先搜索】【图论】【并集查找】2493. 将节点分成尽可能多的组

作者推荐 视频算法专题 本文涉及知识点 广度优先搜索 图论 并集查找 LeetCod2493. 将节点分成尽可能多的组 给你一个正整数 n ,表示一个 无向 图中的节点数目,节点编号从 1 到 n 。 同时给你一个二维整数数组 edges ,其中 edges[i] [ai…

S4---FPGA-K7板级原理图硬件实战

视频链接 FPGA-K7板级系统硬件实战01_哔哩哔哩_bilibili FPGA-K7板级原理图硬件实战 基于XC7K325TFFG900的FPGA硬件实战框图 基于XILINX 的KINTEX-7 芯片XC7K325FPGA的硬件平台,FPGA 开发板挂载了4 片512MB 的高速DDR3 SDRAM 芯片,另外板上带有一个SODIM…

@Bean详解

上文我们简单的通过注解类bean注解的方式将第三方类注入到了IOC容器进行管理,那么本文我们来详细介绍bean的用法。 1. Bean生成Bean的Name问题 Bean注解源码: public interface Bean {//前两个注解可以指定Bean的标识AliasFor("name")Strin…

SEO关键词策略:如何选取最适合你网站的关键词?

关键词作为SEO的基石,其选取策略直接影响着网站的排名和流量。本文将探讨如何制定有效的关键词策略,以提升网站的曝光度和转化率。 SEO工具:百度指数 首先,我们介绍了百度指数这一强大的SEO工具,它可以帮助我们指数化…

考虑到通信链路中断的(Delay Tolerant Network, DTN)

文章目录 A Study of DTN for Reliable Data Delivery from Space Station to Ground Stationabstractintroduction An Analytical Framework for Disruption of Licklider Transmission Protocol in Mars Communicationsabstract本文贡献 OVERVIEW OF RELIABLE DATA TRANSMISS…

资源池化单集群安装经验总结

登录linux环境通过跳板机用ssh命令连接分配的ip,将准备好的openGauss安装包以及xml文件上传到跳板机用scp命令传到自己的节点。 问题1:预安装包版本问题 解决方法:查看自己机器的系统,至openGauss官网下载正确版本的安装包 open…

Java使用spire.doc操作word文档(合并、插入文字图片和表格、替换书签)

一、引入依赖 <dependency><groupId>e-iceblue</groupId><artifactId>spire.office</artifactId><version>7.5.4</version> </dependency> 二、word操作 1、合并word文档 import com.spire.doc.Document; import com.spir…

SQL中为什么不能使用1=1条件

在SQL查询中&#xff0c;使用11条件是一种常见的技巧&#xff0c;它通常被用于动态构建查询条件或者简化查询语句。然而&#xff0c;尽管11条件在某些情况下可能会有一定的用处&#xff0c;但也存在一些不建议使用的原因&#xff1a; 性能问题&#xff1a;当使用11条件时&…

PostgreSQL教程(二十三):服务器管理(五)之客户端认证

当一个客户端应用连接一个数据库服务器时&#xff0c;它将指定以哪个PostgreSQL 数据库用户名连接&#xff0c;就像我们以一个特定用户登录一台 Unix 计算机一样。在 SQL 环境中&#xff0c;活动的数据库用户名决定对数据库对象的访问权限 — 详见教程二十四。因此&#xff0c;…

[three.js]搭建场景

背景 虽然一直在从事three.js方面的开发工作&#xff0c;但是都是在同事搭建好的场景下工作的。最近接手的任务让我可以从0到1搭建一个场景&#xff0c;顺便复习一下 搭建三维场景 <script lang"ts" setup> import { ref, onMounted } from vue; …

pycharm进入函数定义快捷键

在 PyCharm 中&#xff0c;你可以通过使用快捷键来快速进入函数&#xff0c;而不必通过鼠标点击。以下是几个常用的快捷键&#xff1a; 用鼠标选择函数后&#xff1a; Ctrl B&#xff1a;进入函数的定义。 Ctrl Alt B&#xff1a;进入函数的实现&#xff08;如果有的话&…

目标检测——摩托车头盔检测数据集

一、简介 首先&#xff0c;摩托车作为一种交通工具&#xff0c;具有高速、开放和稳定性差的特点&#xff0c;其事故发生率高&#xff0c;伤亡率排在机动车辆损伤的首位。因此&#xff0c;摩托车乘员头盔对于保护驾乘人员头部安全至关重要。在驾乘突发状况、人体受冲击时&#…

mysql 分组取前10条数据

mysql 分组取前10条数据 1.使用自定义函数 select name,gender,age,rankk from (selectname,gender,age,rankk:if(gengender,rankk1,1) as rankk,gen:gender from t_user,(select rankk:0,gen:null) temp order by gender,age asc) a where a.rankk < 10;2.使用row_nu…

#14vue3生成表单并跳转到外部地址的方式

1、背景 后端返回的json数据中包含一个json数组&#xff0c;此数组中是目标跳转地址所需要的form表单的数据。 2、跳转前的页面 const goto () > {finish.value true;request.post(/xxx/yyy,{zzz: zzz.value}).then(res > {const url res.data.submitUrlconst params…