Tạo một bảng với tất cả các tháng, sau đó kết hợp nó với truy vấn của bạn. Dọc theo dòng của
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
Nó sẽ hiệu quả, nhưng nó sẽ trả lại cho bạn kết quả từ tháng 1 đến tháng 12 và sẽ không cho bạn nhiều năm. Một câu hỏi tương tự đã được hỏi trước đây, sau đó tôi đã đưa ra một truy vấn rất phức tạp, vì vậy nếu bạn không thấy điều gì đơn giản hơn, hãy xem xét:
Truy vấn giữa các ngày không hoạt động, bây giờ chúng ta đang ở trong một năm mới