Créez une table avec tous les mois, puis joignez-la à gauche avec votre requête. Dans le sens de
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
Cela fonctionnera en quelque sorte, mais cela vous renverra des résultats de janvier à décembre et ne vous donnera pas d'années. Une question similaire a déjà été posée, puis j'ai proposé une requête très complexe, donc si vous ne trouvez rien de plus simple, pensez à jeter un coup d'œil :
La requête entre les dates ne fonctionne pas, nous sommes maintenant dans une nouvelle année