Перечислять в postgresql - PullRequest
       4

Перечислять в postgresql

1 голос
/ 07 февраля 2012

Есть ли способ перечислить строки запроса в 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 ]

3 голосов
/ 07 февраля 2012

Это должно сделать то, что вы ищете:

 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
3 голосов
/ 07 февраля 2012

Я не уверен, что вы просите.«Номер строки в группе точек» - это прямолинейное оконная функция приложения, но я не знаю, что означает «массив идентификаторов».

Дана такая дата:

 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...