Създайте таблица с всички месеци и след това я присъединете към нея с вашата заявка. По линия на
select count(1) as count, months.month, year(published_at) as year
from months left join articles on months.month = month(published_at)
where published_at >= (now() - interval 1 year) and published_at <= now()
group by month(published_at)
order by year asc, month asc
Донякъде ще работи, но ще ви върне резултати от януари до декември и няма да ви даде години. Подобен въпрос беше зададен преди, след което излязох с много сложна заявка, така че ако не намерите нищо по-просто, помислете да разгледате:
Заявката между датите не работи, сега сме в нова година