Mysql 按月份统计 不存在的月补0

直接上sql

       

 SELECT  months_list.months   months,IFNULL(data.count, 0) statistics from 
(select DATE_FORMAT(create_time, '%c') months, count(1) count from djlr_alarm GROUP BY months) data
right join 
(SELECT DATE_FORMAT(@date := DATE_ADD(@date, interval -1 MONTH),'%c') months from 
(SELECT @date := DATE_ADD('2022-06-22 HH:MM:ss', interval 1 MONTH) from djlr_alarm)
 days limit 28) months_list on months_list.months = data.months

Mysql 按月份统计 不存在的月补0_第1张图片

 

细节说明:DATE_FORMAT(create_time, '%c')

此函数查询结果会将月份直接返回数字如 :6 下面是详细说明

格式     描述
%a        缩写星期名
%b        缩写月名
%c        月,数值
%D        带有英文前缀的月中的天
%d        月的天,数值(00-31)
%e        月的天,数值(0-31)
%f        微秒
%H        小时 (00-23)
%h        小时 (01-12)
%I        小时 (01-12)
%i        分钟,数值(00-59)
%j        年的天 (001-366)
%k        小时 (0-23)
%l        小时 (1-12)
%M        月名
%m        月,数值(00-12)
%p        AM 或 PM
%r        时间,12-小时(hh:mm:ss AM 或 PM)
%S        秒(00-59)
%s        秒(00-59)
%T        时间, 24-小时 (hh:mm:ss)
%U        周 (00-53) 星期日是一周的第一天
%u        周 (00-53) 星期一是一周的第一天
%V        周 (01-53) 星期日是一周的第一天,与 %X 使用
%v        周 (01-53) 星期一是一周的第一天,与 %x 使用
%W        星期名
%w        周的天 (0=星期日, 6=星期六)
%X        年,其中的星期日是周的第一天,4 位,与 %V 使用
%x        年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y        年,4 位
%y        年,2 位

其次整个sql的统计结果为当前月及其之前的统计,

缺点是:补0 只会在已有数据的 起止中间的补0 如只有一条则不会补0

你可能感兴趣的:(sql,统计,mysql,数据库,java)