我需要检索过去 7 天内登录的用户列表以及他们登录的计数,给出以下表格(为了简单起见,进行了精简):
+-------------------+ +-----------------------------+
| users | | event_logs |
+-------------------+ +-----------------------------+
| id | name | | user | event | created_at |
+-------------------+ +-----------------------------+
| 1 | Jake | | 1 | login | date |
| 2 | Jenny | | 2 | login | date |
| 3 | Polly | | 2 | login | date |
+-------------------+ | 2 | login | date |
| 1 | login | date |
| 3 | login | date |
| 3 | login | date |
| 1 | login | date |
+-----------------------------+
到目前为止,我已经能够连接两个表并访问登录行,但结果包含重复项且没有计数。
SELECT u.name, e.created_at
FROM event_logs e
INNER JOIN users u ON e.user = u.id
WHERE e.event = "login"
AND DATE(e.created_at) >= DATE_ADD(CURDATE(), INTERVAL -7 DAY)
ORDER BY u.id;
所以我尝试创建一个子查询,但运行 select * FROM ( <<THAT QUERY ABOVE>>) logins;
返回语法错误:
最佳答案
首先,值应该用单引号括起来。您也不需要子查询来计算用户登录的实例数。您可以直接使用 COUNT()
和 GROUP BY
。
SELECT u.name,
COUNT(e.created_at) AS TOTAL_COUNT
FROM event_logs e
INNER JOIN users u ON e.user = u.id
WHERE e.event = 'login'
AND DATE(e.created_at) >= DATE_ADD(CURDATE(), INTERVAL -7 DAY)
GROUP BY u.name
关于mysql - 用于收集不同登录信息的子 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48887218/