2012-02-07 53 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 2012-02-07 08:05:45

+0

期望的結果集不清楚。請指定<點組中的或提供示例。 – 2012-02-07 08:07:07

回答

3

我不知道你問什麼。 「分組中的行號」是一個簡單的window function應用程序,但我不知道「id數組」是什麼意思。

給定的日期是這樣的:

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 

你可以得到每場比賽的排名與此:

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

這將會給喜歡這一點,你的輸出:

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

就是這樣!你瞭解我。謝謝。 – 2012-02-07 08:53:28

+1

@NikolayFominyh:很高興幫助,我也有熊爲鄰居,我必須從他們捍衛我的垃圾:) – 2012-02-07 10:23:06

3

這應該做你正在尋找的東西:

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

這也很好。 – 2012-02-07 08:54:12