【问题标题】:SQL- selecting two id's who share something in commonSQL-选择两个有共同点的 id
【发布时间】:2018-09-15 20:51:02
【问题描述】:

我有一个包含 player_id、team_id 的表

我想查找在相同的 3 支或更多支球队中比赛的所有球员。

预期的输出是:

player1, player2, number_of_teams

到目前为止,我有类似的东西

SELECT player_id as player1, player_id as player2, count(team_id) as number_of_teams
FROM player_history
WHERE ....

样本数据:

player_id | team_id 
--------------------
001       | 23 
001       | 15
001       | 21 
002       | 23 
002       | 21
002       | 15
002       | 34 
003       | 23 
003       | 15
003       | 34 
003       | 21 
004       | 12 
004       | 11 
004       | 23 

应该返回:

player1 | player2 | number_of_teams
 -----------------------------------
001 | 002 | 3
001 | 003 | 3
002 | 003 | 4

【问题讨论】:

  • 你能提供一些样本数据并期待结果吗?真的很有帮助
  • player1和player2有什么不同?
  • 有两个以上的play,谁加入了三个以上的队伍呢?
  • 更新了数据/输出
  • 你没有模式,你想要的查询不会输出你想要的。

标签: sql sqlite


【解决方案1】:

你应该做的是自己加入你的表,在同一队但不同的球员,一旦找到,你应该对结果表进行分组并计数

因为我假设每支球队有超过 2 名球员并且你正在寻找同一年中的不同球员,就像暗示的那样(没有真正指定)在您的问题中,我冒昧地将其添加到连接条件中 你当然可以删除它

    SELECT
     p1, 
     p2, 
     COUNT(team_id) as total

     FROM
    (

          SELECT
          h1.team_id,
             h1.player_id as p1, 
             h2.player_id as p2
            FROM
             player_history h1
             INNER JOIN player_history h2 ON h1.team_id = h2.team_id AND h1.player_id != h2.player_id AND h1.year = h2.year
            GROUP BY
             h1.team_id,
 h1.player_id
           ) sameteam

    GROUP BY
    p1, 
    p2
    HAVING
    total >= 3

请注意,您的示例结果与示例数据不符。 play 4不应该在列表中

SQLFiddle here 希望对你有帮助

【讨论】:

  • 是的,我为这个例子杀死了年份列
  • 这样您就可以删除最后一个连接条件
  • 我将其标记为正确,但我尚未测试
  • 除非我错了,否则这是行不通的(因为肯定有 GROUP BY 子句)。
  • 应该嵌套
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-18
  • 1970-01-01
  • 1970-01-01
  • 2021-01-30
  • 1970-01-01
相关资源
最近更新 更多