Установка приращения и сброса значения для строк - PullRequest
0 голосов
/ 04 октября 2018

Я добавляю новый столбец int в существующую таблицу.Я пытаюсь установить значение для всех строк в таблице.

players_table:
 - id
 - company_id
 - rank // new column

Чтобы установить начальные значения для ранга, я хочу просто увеличить ранг на 1, сгруппированный по компаниям.

Пример

companies:
id | name
---------------
1  | first comp
2  | second comp

players:
id | company_id | rank 
-----------------------
1  |     1      |   1
2  |     1      |   2
3  |     1      |   3
4  |     2      |   1
5  |     2      |   2

Можно ли добиться этого с помощью SQL?

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

вы можете попробовать использовать ROW_NUMBER или RANK оконную функцию.

SELECT *,ROW_NUMBER() OVER(PARTITION BY company_id order by id )rank
FROM players
0 голосов
/ 04 октября 2018

Вы можете использовать row_number():

select p.*, row_number() over (partition by p.company_id order by p.id) as rank
from players p;

Чтобы установить значение, используйте update:

update players p
    set rank = new_rank
from (select p.*, row_number() over (partition by p.company_id order by p.id) as new_rank
      from players p
     ) pp
where pp.id = p.id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...