Подсчет записей за каждый месяц, в том числе с нулевым результатом

0

Как подсчитать количество результатов из базы данных MySql за каждый месяц в прошлом году, где может существовать запись за определенный месяц, но она будет показывать нуль в качестве счета? Например, я хотел бы подсчитать количество регистраций, которые происходили каждый месяц, и включать эти результаты тоже там, где не регистрировались регистрации.

    Month    Count
      1        4
      2        2
      .        .
      .        .
      6        0
      .        .
      .        .
Теги:
count

1 ответ

1
Лучший ответ

Хотя, хотя существует множество ответов, я обнаружил, что большинство из них трудно читать и понимать. Однако, используя производные таблицы, я думаю, что это проще сделать с данным запросом ниже, где мы пытаемся подсчитать количество регистраций за последние 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] Он группирует результаты по индексу исходного месяца.

Надеюсь, это поможет кому-то помочь.

  • 0
    Я думаю, что лучше решать проблемы отображения данных в коде приложения
  • 0
    Это действительно зависит от контекста. Конечно, приложение может справиться с этой логикой. Однако, если вы игнорируете первый столбец из этого набора результатов и берете только 2-й столбец, настройка логики приложения будет затруднена.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню