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

目录

起因

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

实现

bash 复制代码
#如果每个月都有数据的话是比较简单的
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

不过这种方式可能会存在漏掉月份的情况

bash 复制代码
#如果要在补齐月份使用这种
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
		
UNION ALL

SELECT 
    m.date as month,
    0 AS number_of_invoices
FROM 
    ( SELECT DATE_FORMAT(CURDATE(), '%Y-%m') AS date
    UNION ALL
    SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m') date
    UNION ALL
    SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 2 MONTH), '%Y-%m') date
    UNION ALL
    SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 3 MONTH), '%Y-%m') date
    UNION ALL
    SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 4 MONTH), '%Y-%m') date
	UNION ALL
    SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 5 MONTH), '%Y-%m') date	) m
where not exists(
		SELECT 
    		DATE_FORMAT(f.date, '%Y-%m') AS date
		FROM in_storeage_form f
		WHERE date BETWEEN DATE_SUB(CURDATE(), INTERVAL 6 MONTH) AND CURDATE()
			and  DATE_FORMAT(f.date, '%Y-%m') = m.date
		GROUP BY date
	) 
order by month desc

结论

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

相关推荐
TiDB 社区干货传送门7 分钟前
从40秒到11毫秒:TiDB环境下一次SQL深潜优化实战
数据库·sql·tidb
IP管家20 分钟前
企业级IP代理解决方案:负载均衡与API接口集成实践
服务器·网络·数据库·网络协议·tcp/ip·容器·负载均衡
小吕学编程33 分钟前
Jackson使用详解
java·javascript·数据库·json
雪碧聊技术35 分钟前
数据库的范式
数据库·范式
Arbori_2621536 分钟前
Oracle 高水位线(High Water Mark, HWM)
数据库·oracle
yuanpan40 分钟前
MongoDB与PostgreSQL两个数据库的特点详细对比
数据库·mongodb·postgresql
vvilkim1 小时前
Redis 事务与管道:原理、区别与应用实践
数据库·redis·缓存
TY-20251 小时前
数据库——SQL约束&&窗口函数介绍
数据库·sql·oracle
java1234_小锋1 小时前
SQL里where条件的顺序影响索引使用吗?
数据库·sql
StarRocks_labs1 小时前
StarRocks MCP Server 开源发布:为 AI 应用提供强大分析中枢
数据库·starrocks·人工智能·开源·olap·mcp