重新编号PostgreSQL 9.3中的排序列

时间:2015-02-03 20:30:59

标签: postgresql

我在Postgres表中有一个排序列,我试图在SQL中动态地重新排序该列。在MySQL中我只会运行此查询:

SET @new_ordering = 1;
UPDATE grados SET g_order = (@new_ordering := @new_ordering + 1) ORDER BY g_order ASC;

但当然,这并不适用于Postgres。如何在Postgres中使用新的递增值更新排序列时运行类似的东西?

1 个答案:

答案 0 :(得分:2)

这可以使用Postgres中的窗口函数轻松完成:

update grados
  set g_order = t.rn
from (
  select pk_column, 
         row_number() over (order by g_order) as rn
  from grados
) t
where t.pk_column = grados.pk_column;

您需要将pk_column替换为真正的主键列才能获得正确的连接。

SQLFiddle:http://sqlfiddle.com/#!15/14a67/1