本文主要是介绍统计近六个月的数据,自动补充月份,无数据补充0.,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
数据库表如下:
需要统计近六个月的数据,由于数据库表里面只有4、5、6、月份的数据,所以最终查询的出的结果是 :
月份 |
count |
---|---|
04 | 10 |
05 | 2 |
06 | 7 |
但是1、2、3月份的没显示,期待的结果:
月份 | count |
01 | 0 |
02 | 0 |
03 | 0 |
05 | 2 |
06 | 7 |
以下下是具体sql:
SELECT a.click_month,IFNULL(b.READCOUNT,0) AS READCOUNT
FROM ( SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 5 MONTH),'%m') AS click_month UNION ALL SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 4 MONTH),'%m') AS click_month UNION ALL SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 3 MONTH),'%m') AS click_month UNION ALL SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 2 MONTH),'%m') AS click_month UNION ALL SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH),'%m') AS click_month UNION ALL SELECT DATE_FORMAT(CURDATE(),'%m') AS click_month ) a LEFT JOIN ( SELECT DATE_FORMAT(RECORD_DATE,'%m') AS DATETIME, SUM(READCOUNT) AS READCOUNTFROM TEST_A WHERE 1=1GROUP BY DATE_FORMAT(RECORD_DATE,'%Y-%m')
) b ON a.click_month = b.datetime
注:
==============================================================================================
这里重点解释一下这条sql中用到的函数有: DATE_FORMAT(date,format),DATE_SUB(1,2),INTERVAL ? MONTH
1、DATE_FORMAT(date,format):函数用于以不同的格式显示日期/时间数据,date 参数是合法的日期。format 规定日期/时间的输出格式。(%m=月,数值(00-12)).
2、DATE_SUB(date,INTERVAL expr type):date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。type 可以是年 月 日(year,month,day)等。
这篇关于统计近六个月的数据,自动补充月份,无数据补充0.的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!