[英]select users have more than one distinct records in mysql
对于保存用户网页访问行为记录的表,如何选择访问多个网页的用户。
这个表的结构是:
userId webpageId visitTime
0 123 ...
0 124 ...
1 123 ...
... ... ...
我可以计算使用:
SELECT userId, COUNT(DISTINCT webpageId) AS count FROM visits GROUP BY userId;
它给了我这样的结果:
userId count
0 2
1 1
2 6
... ...
我怎样才能执行查询,给我最终结果,如:
userId
0
2
...
每个都是访问多个 DISTINCT 网页的用户
只需添加 have 子句
SELECT userId, COUNT(DISTINCT webpageId) AS count
FROM visits
GROUP BY userId
HAVING COUNT(DISTINCT webpageId) > 1
但如果你只有什么ID
SELECT userId
FROM visits
GROUP BY userId
HAVING COUNT(DISTINCT webpageId) > 1
您在HAVING
子句而不是WHERE
上过滤的原因是, WHERE
子句不能支持聚合的列。
试试这个:
SELECT userId, COUNT(DISTINCT webpageId) AS count FROM visits GROUP BY userId
having COUNT(DISTINCT webpageId) > 1
更多: HAVING
虽然在这种情况下HAVING
是一种很好的方法,但请记住,查询可以嵌套:
SELECT userId, pageCount
FROM (
SELECT userId, COUNT(DISTINCT webpageId) AS pageCount
FROM visits
GROUP BY userId) AS n
WHERE pageCount > 1
实际的查询计划可能会有所不同,特别是如果HAVING
是优化的情况,但没有理由说明计划必须不同。 (如果存在问题或疑虑,请比较特定 RDBMS/版本的计划。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.