指望 mysql GROUP BY
Count on mysql 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
子句来限制用户标识时,这一点得到了验证。以下查询给出了单个用户的正确计数。
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,因为它使用左连接将缺少项目的用户包括在访问者中 table).
我想使用以下两个(简化的)表格计算每个用户访问我网站的唯一天数:
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
子句来限制用户标识时,这一点得到了验证。以下查询给出了单个用户的正确计数。
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,因为它使用左连接将缺少项目的用户包括在访问者中 table).