数据库表如下:

需要统计近六个月的数据,由于数据库表里面只有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)等。
本文介绍了一种SQL查询方法,用于统计过去六个月的数据,并确保即使没有数据的月份也能显示为0。通过使用DATE_FORMAT和DATE_SUB函数,该查询能够按月汇总数据并填充缺失的月份。
1万+

被折叠的 条评论
为什么被折叠?



