postgresql - 在 PostgreSQL 9.3 中重新编号排序列

标签 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 中运行类似的操作来使用新的增量值更新排序列?

最佳答案

这可以使用 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

关于postgresql - 在 PostgreSQL 9.3 中重新编号排序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28308186/

相关文章:

python - 在 kubernetes 集群中部署 sentry helm

postgresql - 如何使用 Postgres 的行级锁定更新表中的随机 4 行?

javascript - postgres 与 node.js 连接中的 SASL 错误

postgresql - 在表达式中使用同一表中的两个不同行

sql - 每组最大n个略有不同

php - 此类如何知道要查询哪个表?

sql - 从 VARCHAR 转换为 DATE

sql - 如何在 PostgreSQL 中获取表的列名和数据类型列表?

PostgreSQL 触发器使默认值引用另一个表

PostgreSQL 创建一个重新映射列的插入触发器