Utwórz tabelę ze wszystkimi miesiącami, a następnie dołącz do niej z zapytaniem. Na wzór
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
To trochę zadziała, ale zwróci wyniki od stycznia do grudnia i nie da lat. Podobne pytanie zadano już wcześniej, potem wymyśliłem bardzo złożone zapytanie, więc jeśli nie znajdziesz nic prostszego, rozważ zajrzenie:
Kwerenda między datami nie działa, teraz jest nowy rok