SQL - выбор двух идентификаторов, которые имеют что-то общее - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть таблица с 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

1 Ответ

0 голосов
/ 16 сентября 2018

Что вам нужно сделать, так это присоединиться к своему столу в одной команде, но с разными игроками, когда они найдены, вы должны сгруппировать таблицу результатов и сосчитать

Поскольку я предполагаю , есть ещечем 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 здесь надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...