select用户在mysql中有多个不同的记录
对于保存用户网页访问行为记录的表,如何选择访问多个网页的用户 这些表格的结构如下:select用户在mysql中有多个不同的记录,mysql,sql,select,Mysql,Sql,Select,对于保存用户网页访问行为记录的表,如何选择访问多个网页的用户 这些表格的结构如下: userId webpageId visitTime 0 123 ... 0 124 ... 1 123 ... ... ... ... 我可以用下列方法数数: SELECT user
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
...
我如何执行查询以获得最终结果,如:
userId count
0 2
1 1
2 6
... ...
userId
0
2
...
每个都是访问多个不同网页的用户只需添加having子句即可
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
子句不能支持WHERE聚合的列。请尝试以下操作:
SELECT userId, COUNT(DISTINCT webpageId) AS count FROM visits GROUP BY userId
having COUNT(DISTINCT webpageId) > 1
更多信息:在这种情况下,拥有是一种很好的方法,请记住查询可以嵌套:
SELECT userId, pageCount
FROM (
SELECT userId, COUNT(DISTINCT webpageId) AS pageCount
FROM visits
GROUP BY userId) AS n
WHERE pageCount > 1
实际的查询计划可能会有所不同,特别是如果
have
是一个优化的情况,但是没有理由说明计划必须不同。(如果存在问题或顾虑,请比较特定RDBMS/版本上的计划。)顺便问一下:我可以在HAVING子句中使用别名“count”吗?@zoujyjs yesHAVING
子句已经支持别名了。。看这里