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 yes
HAVING
子句已经支持别名了。。看这里