我在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',依此类推。
答案 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
是该表的主键。