Как правильно подсчитать одним запросом количество новостей по месяца?
поле date называть это "моветон" :)SELECT COUNT(id),  concat(MONTHNAME(date), ' ', YEAR(date)) as month FROM news
GROUP BY month
Оконные функции вам в помощь, если СУБД не поддерживает, то скорее всего нужно будет писать многоэтажный SQL запрос.