2017-10-19 6 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은 이것에 정말로 적합하지 않습니다. –