Мне нужно получить отчет об активности пользователей в веб-приложении.
Во-первых, у меня есть таблица, которая подсчитывает, сколько раз пользователь входит в наше приложение, и выглядит так:
user_activity
-----------------------------------------------------
| ID_login | Username | Date | Hour | ... |
|---------------------|------------|----------|-----|
| 1 | john | 2019-03-01 | 08:49:24 | ... |
| 2 | john | 2019-03-01 | 14:12:49 | ... |
| 3 | jane | 2019-03-03 | 10:02:31 | ... |
| ... | ... | ... | ... | ... |
-----------------------------------------------------
То, что я хочу сделать, - это иметь отчет, который даст мне не только общую сумму входа в систему на пользователя за определенный период времени.Это я уже могу сделать.Я застреваю, когда пытаюсь получить отчет за каждый месяц предыдущего года, где месяцы находятся в отдельных столбцах.
Я бы хотел, чтобы таблица, сгенерированная моим запросом, выглядела так:
user_activity
--------------------------------------------------------
| Username | login_total | login_jan | login_feb | ... |
|------------------------|-----------|-----------|-----|
| john | 4827 | 164 | 191 | ... |
| james | 3866 | 92 | 144 | ... |
| jane | 2979 | 104 | 92 | ... |
| ... | ... | ... | ... | ... |
--------------------------------------------------------
Итак, как вы можете видеть, я думал об использовании значения login_total для использования в ORDER BY.
Итак, вот что у меня есть на данный момент.
SELECT
user_activity.Username,
COUNT(user_activity.ID_login) AS login_total
FROM
user_activity
WHERE
user_activity.Date >= '2018-01-01'
AND
user_activity.Date <= '2018-12-31'
Как получить другой столбец с COUNT, но с другими критериями?Где я должен поставить эти критерии?Я пытался использовать операторы IF и HAVING, но это не сработало.
Я думал, что-то вроде этого ...?
SELECT
user_activity.Username,
COUNT(
IF
(user_activity.Date >= '2019-01-01'
AND
user_activity.Date <= '2019-01-31')
user_activity.ID_login)
AS login_jan,
COUNT(
IF
(user_activity.Date >= '2019-02-01'
AND
user_activity.Date <= '2019-02-28')
user_activity.ID_login)
AS login_feb,
...
FROM
user_activity
Кажется, тоже не работает... Что-то мне не хватает?