【问题标题】:Ability to count repeated row IDs in a MySQL table能够计算 MySQL 表中重复的行 ID
【发布时间】:2017-11-09 02:12:06
【问题描述】:

我正在尝试计算 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

在这里我想得到3,因为有三个重复uid 的实例。这些是423431445。我们将丢弃43, 73, 91, 109,因为它们不会重复。

【问题讨论】:

    标签: mysql group-by count


    【解决方案1】:

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

    select count(*)
    from (select uid
          from login_activity
          where uid <> 0
          group by uid
          having count(*) > 1
         ) la;
    

    只有一个聚合的替代方案使用过滤(并假设 aid/uid 是唯一的):

    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
                 );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-13
      • 2018-03-15
      • 2016-04-03
      • 2012-09-05
      • 2018-11-15
      • 2014-04-08
      • 2016-08-26
      相关资源
      最近更新 更多