MySQL查询统计今年12个月的数据,没有默认为空

此处先省略二百字的废话

做报表统计的时候,常常需要在MySQL端用sql统计近12个月的数据,或者近30天的数据。
假如遇到当月没有数据,或者当天没有数据时,默认为0。

SELECT
	CASE WHEN length(mon)= 1 THEN concat(LEFT(CURRENT_DATE, 5),'0',mon)
	ELSE concat(LEFT(CURRENT_DATE, 5), mon)
	END month
FROM 
	(SELECT @m := @m + 1 mon FROM city, (SELECT @m := 0)a )aa
LIMIT 12

@m是一个变量,随着city的表记录条数逐一递增。

(SELECT @m := @m + 1 mon FROM city, (SELECT @m := 0)a )aa语句的limit来限制条数,需要12个月就为12。注意city是一个常量表(自己数据库存在的一张表即可),只要其条数大于12即可。limit 12非常关键。
date_format(DATE_SUB(now(),INTERVAL @rownum MONTH),'%Y-%m') AS all_day语句,从现在开始,往后推7个月。

结果:
MySQL查询统计今年12个月的数据,没有默认为空_第1张图片

再使用查询出的日期数据 left join 关联要查询的表即可

你可能感兴趣的:(MySql,1024程序员节,mysql,sql)