Используйте EXTRACT(month FROM created_at)
, чтобы получить месяц.Это работает и в MySQL.
Редактировать: использовать ПРАВОЕ СОЕДИНЕНИЕ для таблицы с номерами месяцев:
CREATE TABLE months(nr tinyint);
INSERT INTO months(nr) VALUES (1),(3),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12);
SELECT
nr as month,
COUNT(*) as c
FROM
sale_registrations
RIGHT JOIN months ON EXTRACT(month FROM created_at) = nr
WHERE
(created_at BETWEEN '2011-01-01' AND '2011-12-31')
GROUP BY
EXTRACT(month FROM created_at)
ORDER BY
EXTRACT(month FROM created_at) ASC;
В PostgreSQL вы можете использовать generate_series (), но это неработа в MySQL.