Věřím, že tento dotaz udělá to, co chcete:
SELECT array_agg(players), player_teams
FROM (
SELECT DISTINCT t1.t1player AS players, t1.player_teams
FROM (
SELECT
p.playerid AS t1id,
concat(p.playerid,':', p.playername, ' ') AS t1player,
array_agg(pl.teamid ORDER BY pl.teamid) AS player_teams
FROM player p
LEFT JOIN plays pl ON p.playerid = pl.playerid
GROUP BY p.playerid, p.playername
) t1
INNER JOIN (
SELECT
p.playerid AS t2id,
array_agg(pl.teamid ORDER BY pl.teamid) AS player_teams
FROM player p
LEFT JOIN plays pl ON p.playerid = pl.playerid
GROUP BY p.playerid, p.playername
) t2 ON t1.player_teams=t2.player_teams AND t1.t1id <> t2.t2id
) innerQuery
GROUP BY player_teams
Result:
PLAYERS PLAYER_TEAMS
2:Allen,3:Pierce 1,3
4:Garnett,5:Perkins
Používá array_agg přes teamid pro každého hráče v plays
přiřadit hráče s přesně stejnou konfigurací týmu. Zahrnul jsem například sloupec s týmy, ale ten lze odstranit, aniž by to ovlivnilo výsledky, pokud nebude ze skupiny odstraněn klauzulí.
Příklad SQL Fiddle. Testováno pomocí Postgesql 9.2.4
EDIT:Opravena chyba, která duplikovala řádky.