가령 아래와 같이 데이터가 나올거라고 가정하고...
20190101 22
20190102 25
20190103 11
20190104 77
...
날짜로 group by를 했는데 실제로는 아래와 같이 나왔다면...
20190101 22
20190102 25
20190104 77
...
즉, 1월 3일자에는 해당되는 데이터값이 없는 것이다. 이럴때 아래와 같이 나와주기를 기대한다면...
20190101 22
20190102 25
20190103 0
20190104 77
...
날짜는 빠짐없이, 만약 데이터값이 없다면 결과는 0으로 해서라도 모든 날짜가 표현되기를 바란다면 mysql에서 아래와 같이 처리해주면 된다. 순차 증가하는 숫자를 만들고 이 숫자를 활용해서 순차증가하는 날짜값을 임의로 만드는 것이다. 그런후에 이 결과와 기존의 결과를 outer join을 해주면 원하는 결과를 얻게 된다.
select b.yyyymmdd, IFNULL(a.cnt, 0)
from
(
select date_format(publish_time, '%Y-%m-%d')as yyyymmdd, count(*) cnt
from sample
where publish_time between '2019-06-03 00:00:00' and '2019-08-04 23:59:59'
group by date_format(publish_time, '%Y-%m-%d')
) a
right join
(
select @N := @N +1 AS n ,
date_format( date_add( '2019-06-03' , interval @N -1 day),'%Y-%m-%d') as yyyymmdd
from (sample), (select @N:=0 from dual ) a
limit 100
) b on a.yyyymmdd = b.yyyymmdd
order by b.yyyymmdd asc