Crea una tabella con tutti i mesi, quindi uniscila a sinistra con la tua query. Sulla falsariga di
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
Funzionerà, ma ti restituirà i risultati da gennaio a dicembre e non ti darà anni. Una domanda simile è stata posta in precedenza, poi mi è venuta in mente una query molto complessa, quindi se non trovi nulla di più semplice, considera di dare un'occhiata:
La query tra le date non funziona, ora siamo nel nuovo anno