【问题标题】:MySQL Select All Rows with Distinct Count Greater ThanMySQL选择不同计数大于的所有行
【发布时间】:2015-01-24 03:07:22
【问题描述】:

我有一张桌子relationship,看起来像这样:

relationshipId   userId   teamId
--------------   ------   ------
1                1234     999
2                5678     999
3                1234     888
4                1234     999

我想做的是创建一个查询,显示表中 userId、teamId 组合重复的每一行。

我知道我可以使用 select userId, teamId, count(*) from relationship group by userId, teamId having count(*) > 1 之类的查询找到重复的行以及它们的重复次数

上面的查询会返回:

userId   teamId  count
------   ------  -----
1234     999     2

我想要的是一个查询,它将显示产生count of 2 的两行,以便我可以访问唯一的relationshipIds

所以,我正在寻找以下结果:

relationshipId   userId   teamId
--------------   ------   ------
1                1234     999
4                1234     999

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您的查询是确定哪个关系重复的步骤。

    要获取您想要的数据,您需要使用此结果并将其链接到同一个表以对结果进行过滤。

    这里是查询:

    select a.*
    from relationship as a
    , (
        select userId
        , teamId
        from relationship
        group by userId
        , teamId
        having count(*) > 1
    ) as b
    where a.userId = b.userId
    and a.teamId = b.teamId
    

    【讨论】:

    • 这对我有用,非常感谢。抱歉,我不能投票,但我没有足够的声誉。
    【解决方案2】:

    虽然 A.D. 的答案使用子查询,但您也可以尝试查看:

    Create view relationship_view As Select relationshipID, userID, teamID, count() from relationship having count() > 1;

    然后只需查询该视图: select * from relationship_view group by userID, teamID;

    【讨论】:

    • 我认为这是不正确的,因为 OP 想要所有重复项的不同 ID。或者您可以使用 GROUP_CONCAT 聚合函数。但即使在那种情况下,我也不确定它会回答 OP 的问题。
    • 现在回想起来,我明白了你的意思,感谢您批评我的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    相关资源
    最近更新 更多