mysql - 用于收集不同登录信息的子 SQL 查询

标签 mysql sql

我需要检索过去 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/

相关文章:

php - 想找出从 mysql 返回的结果总数

mysql - 向表中插入数据时出现 SQL 错误

sql - 对 Oracle 数据库使用 ORDER BY dbms_random.value 时的性能问题

javascript - 尽管出现成功消息,为什么用户输入不会进入数据库?

来自循环表的 PHP POST 值

mysql - 如何通过 MySQL 返回基于上次事件日期的列值

MySQL构造返回排序的计数列表

PHP MYSQL 错误,查询无效(但不是无效的)

mysql - SQL 将外部网站的实时数据导入到 SQL 表

MySQL 在子查询中使用别名