数据库表如下:
需要统计近六个月的数据,由于数据库表里面只有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 READCOUNT
FROM TEST_A
WHERE 1=1
GROUP 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)等。