单表Group by查询:统计用户资料被查看次数
解决用户资料被查看情况的统计问题
嗨,我来帮你搞定这个统计需求!
根据你的描述,需要从visits表中统计每个用户资料被查看的情况,按被查看用户(visited字段)分组。结合你给出的示例数据和期望结果,我分两种场景说明:
场景1:统计不同访客的数量(匹配你的期望结果)
从你给出的期望结果来看,你实际需要的是每个用户被多少个不同的访客查看过,而非总访问次数。这种情况下,我们需要用COUNT(DISTINCT visitor)来统计唯一访客数:
SELECT visited, COUNT(DISTINCT visitor) AS count FROM visits -- 如果需要关联用户列表确保只统计存在的用户,取消下面注释 -- JOIN users ON visits.visited = users.user_id GROUP BY visited ORDER BY count DESC;
执行后结果会和你期望的完全一致:
| visited | count |
|---|---|
| '26023' | 3 |
| '26000' | 2 |
原因很直观:
26023被3个不同访客(26000、26001、26002)查看过26000被2个不同访客(26005、26004)查看过
场景2:统计总访问次数
如果你确实需要统计每个用户被查看的总次数(同一个访客多次访问也累计),就用COUNT(*):
SELECT visited, COUNT(*) AS count FROM visits -- JOIN users ON visits.visited = users.user_id GROUP BY visited ORDER BY count DESC;
这个查询会得到:
| visited | count |
|---|---|
| '26023' | 10 |
| '26000' | 3 |
对应示例数据中26023被访问了10次(7+2+1),26000被访问了3次(2+1)。
内容的提问来源于stack exchange,提问作者behzad omidi
相关产品推荐
相关产品推荐

