mysql - 依靠 mysql GROUP BY

标签 mysql count group-by

我想使用以下两个(简化的)表格来计算每个用户访问我的网站的唯一天数:

Table: Users
+--------------+------------------+
| Field        | Type             |
+--------------+------------------+
| userid       | int(10)          |
| firstname    | varchar(50)      |
| lastname     | varchar(50)      |
+--------------+------------------+

Table: Visitors
+--------------+------------------+
| Field        | Type             |
+--------------+------------------+
| visitorid    | int(10)          |
| userid       | int(10)          |
| visitdate    | timestamp        |
+--------------+------------------+

首先,我按DATE(visitdate) 进行分组,以按日期对记录进行分组。 然后我按 userid 进行分组并统计每个用户访问的天数。

我对此的查询是:

SELECT count(userid) as count, userid, firstname, lastname FROM 
    (SELECT users.userid, firstname, lastname, DATE(`visitdate`) AS dateonly FROM 
    visitors JOIN users ON visitors.userid = users.userid 
    GROUP BY DATE(`visitdate`)) b 
GROUP BY userid ORDER BY count DESC

然而,这给出了一个不正确的计数,当我简单地添加一个 WHERE 子句来限制用户 ID 时,就会验证该计数。以下查询给出了单个用户的正确计数。

SELECT count(userid) as count, userid, firstname, lastname FROM 
    (SELECT users.userid, firstname, lastname, DATE(`visitdate`) AS dateonly FROM 
    visitors JOIN users ON visitors.userid = users.userid 
    WHERE users.userid = 167
    GROUP BY DATE(`visitdate`)) b 
GROUP BY userid ORDER BY count DESC

显然我弄错了 - 任何帮助将不胜感激。谢谢。

最佳答案

如果我理解你的问题,我认为这就是你想要的:

SELECT u.userid, u.firstname, u.lastname, COUNT(DISTINCT CAST(v.visitdate AS DATE)) AS visits
FROM users u
LEFT JOIN visitors v ON v.userid = u.userid 
GROUP BY u.userid, u.firstname, u.lastname

这将向您显示每个用户的用户 ID、名字、姓氏以及不同访问日期的计数(如果没有访问,则显示 0,因为它使用左连接来包含访客表中缺少项目的用户)。

关于mysql - 依靠 mysql GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28552618/

相关文章:

mysql - 在 MySql 中执行查询时与 only_full_group_by 相关的错误

SQL选择连续运行数据的最大值

mysql - SQL 替换为语法

mysql - 每个表的总和和单个表的总和

java - 随机生成形状

mysql - 使用 MySQL GROUP BY 从引用表返回一个结果的正确方法

php - 在非英文网络系统(PHP/Mysql)中避免编码/整理字符错误的最佳方法?

mysql - 从包含特定用户的图表中获取 chat_id

Mysql ONLY_FULL_GROUP_BY 模式问题 - 为每个相册选择单个图像 URL(任何)

sql - Linq,双左连接和双计数