【发布时间】:2019-03-05 22:05:07
【问题描述】:
我需要获取有关用户在网络应用上的活动的报告。
首先,我有一个表格,用于计算用户登录我们应用的次数,如下所示:
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
似乎也没有工作......我错过了什么吗?
【问题讨论】:
标签: mysql if-statement count heidisql