繁体   English   中英

选择用户在mysql中有多个不同的记录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM