能够计算MySQL表中重复的行ID

能够计算MySQL表中重复的行ID,mysql,group-by,count,Mysql,Group By,Count,我试图统计MySQL表中所有重复的ID 下面是我在运行此查询后生成的表 SELECT aid, uid, timestamp FROM login_activity where uid <> 0 order by uid aid | uid | timestamp ----------------------- 17 | 43 | 1507677429 63 | 73 | 1507677429 101 | 91

我试图统计MySQL表中所有重复的ID

下面是我在运行此查询后生成的表

   SELECT
      aid, uid, timestamp
    FROM
      login_activity
    where uid <> 0
    order by uid


aid | uid | timestamp
----------------------- 
17  |  43  | 1507677429
63  |  73  | 1507677429
101 |  91  | 1507677429
45  |  109 | 1507677429
1   |  423 | 1507677429
3   |  423 | 1507677429    
23  |  431 | 1507677429
19  |  431 | 1507677429
8   |  431 | 1507677429
7   |  445 | 1507677429
6   |  445 | 1507677429
33  |  445 | 1507677429
9   |  445 | 1507677429
选择
aid,uid,时间戳
从
登录活动
其中uid 0
按uid订购
aid | uid |时间戳
----------------------- 
17  |  43  | 1507677429
63  |  73  | 1507677429
101 |  91  | 1507677429
45  |  109 | 1507677429
1   |  423 | 1507677429
3   |  423 | 1507677429    
23  |  431 | 1507677429
19  |  431 | 1507677429
8   |  431 | 1507677429
7   |  445 | 1507677429
6   |  445 | 1507677429
33  |  445 | 1507677429
9   |  445 | 1507677429

这里我想得到
3
,因为有三个实例重复使用uid。它们是
423
431
445
。我们将丢弃
43、73、91、109,因为它们不会重复。

有几种方法可以做到这一点。我建议从两个聚合开始:

select count(*)
from (select uid
      from login_activity
      where uid <> 0
      group by uid
      having count(*) > 1
     ) la;
select count(distinct la.uid)
from login_activity la
where exists (select 1
              from login_activity la2
              where la2.uid = la.uid and la2.aid <> la.aid
             );