Postgresql - Изменение или обращение чисел в новый столбец - PullRequest
0 голосов
/ 21 апреля 2020

Есть ли способ в postgresql, где я могу перевернуть самое большое целое число (или номер версии) и заменить его самым низким? Переверните его, а затем создайте новый столбец, в котором будет показан обратный порядок. В качестве примечания, наибольшее целое число может отличаться, например, оно может быть 4 (как в примере ниже) или 40. В то же время, оставляя версию # такой же, если есть кратные числа. Например, если есть два 40, они версии будут одинаковыми с новым номером, а не частью подсчета. В качестве примера:

  software| version #
( 18.0    |     4     )
( 18.0    |     4     )
( 17.0    |     3     )
( 17.0    |     3     )
( 16.0    |     2     )
( 16.0    |     2     )
( 16.0    |     2     )
( 15.0    |     1     )

И измените его на:

 software | New vers #
( 18.0    |     1     )
( 18.0    |     1     )
( 17.0    |     2     )
( 17.0    |     2     )
( 16.0    |     3     )
( 16.0    |     3     )
( 16.0    |     3     )
( 15.0    |     4     )

Вот моя неудачная попытка:

select
    tx.cid,
    count(camaversion)
FROM 
    (select 
        software, 
        version 
      from  
        software_info  
        GROUP BY 
            software_info.software, 
            version 
        Order by version desc )tx
    Group by tx.software, tx.version

Все еще пытаюсь понять все возможности postgresql и код преследует мой мозг и, похоже, не может понять. Я просто знаю, что есть способ. Попытка поместить это на карту, чтобы был более легкий способ раскрасить это. Любой код или предложения помогут.

1 Ответ

0 голосов
/ 21 апреля 2020

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

select si.*, dense_rank() over (order by version desc) as new_version
from software_info si;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...