PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Kueri SQL kompleks dengan banyak tabel dan relasi

Saya yakin kueri ini akan melakukan apa yang Anda inginkan:

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

Ini menggunakan array_agg di atas teamid untuk setiap pemain di plays untuk mencocokkan pemain dengan konfigurasi tim yang sama persis. I Menyertakan kolom dengan tim misalnya, tetapi kolom tersebut dapat dihapus tanpa memengaruhi hasil selama kolom tersebut tidak dihapus dari grup menurut klausa.

Contoh SQL Fiddle. Diuji dengan Postgesql 9.2.4

EDIT:Memperbaiki kesalahan yang menggandakan baris.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Saya perlu menetapkan semua aktivitas dalam SQL ke satu ID, tetapi saat ini setiap aktivitas memiliki tiga id

  2. Kueri UNION ALL dinamis di Postgres

  3. Bagaimana cara memanggil fungsi database menggunakan SQLAlchemy di Flask?

  4. Perintah COPY:salin hanya kolom tertentu dari csv

  5. Bagaimana cara menerjemahkan PostgreSQL OID menggunakan python