2012-02-07 4 views
1

postgresql에서 행의 열을 열거 할 수있는 방법이 있습니까?postgresql에서 열거하십시오

Table players 
id player_id game_id points 

그리고는 다음과 같이 질의합니다 :

나는 다음과 같은 테이블이

SELECT game_id, <row_number in points group>, <array of ids> 
    FROM players WHERE game_id = %s 
    GROUP BY game_id, points; 
+2

답변을 원할 경우 샘플 데이터 (입력 및 출력)를 추가하십시오. 원하는 내용이 명확하지 않습니다. – gbn

+0

원하는 결과 집합이 분명하지 않습니다. <행 그룹 번호>, <배열 번호>를 지정하거나 예제를 제공하십시오. –

답변

3

난 당신이 요구하는지 모르겠어요. "포인트 그룹의 행 번호"는 똑 바른 window function 응용 프로그램이지만 어떤 "배열 배열"이 의미하는지 알지 못합니다.

이 같은

주어진 날짜 :

id | player_id | game_id | points 
----+-----------+---------+-------- 
    1 |   1 |  1 |  0 
    2 |   1 |  2 |  1 
    3 |   1 |  3 |  5 
    4 |   2 |  1 |  1 
    5 |   2 |  2 |  0 
    6 |   2 |  3 |  0 
    7 |   3 |  1 |  2 
    8 |   3 |  2 |  3 
    9 |   3 |  3 |  1 

당신이와 별 게임 순위를 얻을 수 있습니다 :

game_id | player_id | points | rank 
---------+-----------+--------+------ 
     1 |   3 |  2 | 1 
     1 |   2 |  1 | 2 
     1 |   1 |  0 | 3 
     2 |   3 |  3 | 1 
     2 |   1 |  1 | 2 
     2 |   2 |  0 | 3 
     3 |   1 |  5 | 1 
     3 |   3 |  1 | 2 
     3 |   2 |  0 | 3 
+0

그게 다야! 너 나를 이해 했어. 감사. –

+1

@NikolayFominyh : 도움이되어 기쁘다. 나는 이웃 사람들을 위해 곰을 가지고 있으며, 나는 그들로부터 내 쓰레기를 지켜야한다. –

3

이이 같은 당신 출력을 줄 것이다

select game_id, player_id, points, 
     rank() over (partition by game_id order by points desc) 
from players 

검색 대상을해야합니다.

SELECT game_id 
, row_number() OVER (PARTITION BY game_id ORDER BY points) AS num 
, array_agg(id) AS ids 
FROM players WHERE game_id = %s 
GROUP BY game_id, points 
ORDER BY game_id, points 
+0

그 또한 좋다. –

관련 문제