Получить количество пользователей в месяц с даты MySQL - PullRequest
1 голос
/ 30 октября 2019

Я хочу отображать зарегистрированных пользователей каждый месяц в моем веб-приложении. Для этого я предполагаю запросить счетчик из таблицы пользователя и отправить его во внешний интерфейс. В качестве примера я получаю количество пользователей за один месяц из следующего запроса.

select count(u_id) AS 'Count', MONTH(reg_date) AS Month
from user
WHERE(reg_date) BETWEEN '2019-10-01' AND '2019-10-31'

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

------------------------
Count            Month
------------------------
2                10
------------------------

Я хочу получить следующий результат:

------------------------
Count            Month
------------------------
2                1
------------------------
10               2
------------------------
5               3
------------------------

Я сохранил идентификатор пользователя и дату регистрации впользовательская таблица. дата регистра - это тип даты SQL, а UserID - целое число. Я могу получить количество пользователей за данный месяц, используя запрос, который я упомянул ниже, и сохранить его в переменной в серверной части и снова вызвать базу данных, чтобы получить следующий месяц и т. Д. (Использование цикла). Затем создайте список и отправьте на веб-интерфейс. Но для этого мне нужно несколько раз вызвать базу данных. Для получения пользователей 12 месяцев мне нужно сделать запрос 12 раз. Я хочу получить количество пользователей в каждом месяце всего за один запрос. Если я сохраню дату в виде трех столбцов, таких как дата, месяц, год, я смогу получить этот результат. Но я не хочу менять текущую структуру таблицы. Есть ли способ решить эту задачу, не меняя структуру текущей таблицы?

Ответы [ 2 ]

3 голосов
/ 30 октября 2019

Сначала генерируется months 1 to 12, затем join ваш исходный запрос на основе month.

select t1.monthNo,  t2.Count
from (select 1 as monthNo
    union
    select 2 as monthNo
    union
    select 3 as monthNo
    union
    select 4 as monthNo
    union
    select 5 as monthNo
    union
    select 6 as monthNo
    union
    select 7 as monthNo
    union
    select 8 as monthNo
    union
    select 9 as monthNo
    union
    select 10 as monthNo
    union
    select 11 as monthNo
    union
    select 12 as monthNo) as t1
left join 
    (select count(u_id) AS 'Count', month(reg_date) AS Month
    from user   
    group by month(reg_date)) t2 on t2.Month = t1.monthNo
3 голосов
/ 30 октября 2019

То, что вы ищете, это GROUP BY.

SELECT count(u_id) AS 'Count', MONTH(reg_date) AS Month
from user
WHERE(reg_date) BETWEEN '2019-01-01' AND '2019-12-31'
GROUP BY YEAR(reg_date), MONTH(reg_date);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...