Как подсчитать количество результатов из базы данных MySql за каждый месяц в прошлом году, где может существовать запись за определенный месяц, но она будет показывать нуль в качестве счета? Например, я хотел бы подсчитать количество регистраций, которые происходили каждый месяц, и включать эти результаты тоже там, где не регистрировались регистрации.
Month Count 1 4 2 2 . . . . 6 0 . . . .
Хотя, хотя существует множество ответов, я обнаружил, что большинство из них трудно читать и понимать. Однако, используя производные таблицы, я думаю, что это проще сделать с данным запросом ниже, где мы пытаемся подсчитать количество регистраций за последние 12 месяцев из таблицы пользователя:
select derived.mm as month, count(u.reg_date) as count from (
SELECT 1 mm UNION ALL SELECT 2 UNION ALL SELECT 3
UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7
UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11
UNION ALL SELECT 12
) derived
left join user u
on derived.mm = month(reg_date)
and u.reg_date > LAST_DAY(DATE_SUB(curdate(),INTERVAL 1 YEAR))
group by derived.mm
КАК ЭТО РАБОТЫ
Он выводит таблицу (полученный псевдоним), которая возвращает 12 строк, по 1 для каждого из 12 месяцев, то есть от 1 до 12 [в подзапросе; строка 2]. Он соединяет номер месяца регистрации с номером соответствующего месяца из данной производной таблицы. [в течение месяцев, когда не регистрировались регистрации, объединенный результат reg_date равен null] И положение как обычно, считая предыдущие 12 месяцев [текущий месяц будет проиндексирован в 12] Он группирует результаты по индексу исходного месяца.
Надеюсь, это поможет кому-то помочь.