2017-10-19 2 views
1

私はトーナメントで選手のリストを持っています。PSQLのテーブルをクエリして、同じリストをペアとして返すにはどうすればよいですか?

tournament=> SELECT * FROM players; 
     name  | player_id 
-------------------+----------- 
Twilight Sparkle |   9 
Fluttershy  |  10 
Applejack   |  11 
Pinkie Pie  |  12 
Rarity   |  13 
Rainbow Dash  |  14 
Princess Celestia |  15 
Princess Luna  |  16 
(8 rows) 

これは、リストを見たいと思う方法です。 postgreSQLにそのようにするにはどうすればよいですか?

 name1  | id1 |  name2  | id2 
-------------------+---------+-------------------+------- 
Twilight Sparkle | 9 | Fluttershy  | 10 
Applejack   | 11 | Pinkie Pie  | 12 
Rarity    | 13 | Rainbow Dash  | 14 
Princess Celestia | 15 | Princess Luna | 16 
(4 pairs) 
+0

私はこれをPythons itertoolsを使って考え出しました。 –

答えて

0

解決済み!残念ながら、私は単純なSQLクエリでこれを行う方法を見つけることができませんでした。しかし、StackOverFlowのスレッドのおかげで、here私はPythonのitertoolsを使って解決策を見つけることができました。 28の代わりに4つのペアが返されます。私は10個のテストすべてに合格しました!以下はtournament.pyへの私の追加です:

import itertools 

swissPairings(): 

    standings = playerStandings() 

    pairingsiterator = itertools.izip(*[iter(standings)]*2) 
    # Iterate through the list and build the pairings 
    results = [] 
    pairings = list(pairingsiterator) 
    for pair in pairings: 
     id1 = pair[0][0] 
     name1 = pair[0][1] 
     id2 = pair[1][0] 
     name2 = pair[1][1] 
     matchup = (id1, name1, id2, name2) 
     results.append(matchup) 
    return results 
+0

これは「ピボット」または「クロスタブ」と呼ばれ、実際にはアプリケーションでうまく実行されます。 SQLはこれにはあまり適していません。 –

関連する問題