創建test表
CREATE TABLE `test` (
`id` int(11) DEFAULT NULL,
`count` varchar(255) DEFAULT NULL,
`create` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
sql語句
select ifnull(sum(u.count),0) as count,A.date from
(
select date_add('2020-04-13',interval @i:=@i+1 day) as date
from (
select 1
union all select 1
union all select 1
union all select 1
union all select 1
union all select 1
union all select 1
union all select 1 ) as tmp,
(select @i:= -1) t
) A
left join test u on s.date = date_format(u.create,'%Y-%m-%d')
GROUP BY A.date
執行代碼運行結果:
其中4月14,4月19,4月20是沒有數據以0表示;
@i:=@i+1:Oracle中有一個僞列rownum,可以在生成查詢結果表的時候生成一組遞增的序列號。MySQL中沒有這個僞列,但是有時候要用,可以用如下方法模擬生成一列自增序號。
ifnull : 如果返回爲null則用0代替;
coalesce(sum(count),0):如果返回爲null則用0代替;
DATE_ADD() 函數向日期添加指定的時間間隔。
中間紅色部分union all需要在java代碼中生成,日期間隔多少他生成多少個