用顺序号替换“订单”列中的内容

时间:2019-02-15 11:05:01

标签: postgresql

我在postgres数据库的表中有一个“ order”列,该序列中有很多缺失的数字。我在弄清楚如何用递增的新数字替换当前列中的数字时遇到问题(请参见示例)。

我所拥有的:

 id  order  name
 ---------------
  1    50   Anna
  2    13   John
  3     2   Bruce
  4     5   David

我想要什么:

 id  order  name
 ---------------
  1     4   Anna
  2     3   John
  3     1   Bruce
  4     2   David

该列的旧版本中包含最低订单号的行应获得新的订单号'1',其后的下一个应获得'2',依此类推。

1 个答案:

答案 0 :(得分:1)

您可以使用window function row_number()计算新数字。结果可以在更新语句中使用:

update the_table
   set "order" = t.rn
from (
  select id, row_number() over (order by "order") as rn
  from the_table
) t 
where t.id = the_table.id;

这假设id是该表的主键。