postgresql - 用序号替换“顺序”列中的内容
问题描述
我在 postgres 数据库的表中有一个“订单”列,其中序列中有很多缺失的数字。我在弄清楚如何用增量的新数字替换列中当前的数字时遇到问题(参见示例)。
我有的:
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”等等。
解决方案
您可以使用窗口函数 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
是该表的主键。
推荐阅读
- sql - 简单的 PostgreSQL 自联接
- c# - 有人可以说我在 C# 任务中做错了什么吗?
- browser - 控制台自动出现在每个网页中
- machine-learning - Pytorch:为什么batch是默认LSTM中的第二维?
- python - scrapy 用户代理是否忽略自定义数据属性
- python - 错误“AttributeError: 'NoneType' object has no attribute 'endswith'”是什么意思?
- android - 错误:找不到符号 this.mProgressDialog = ProgressDialog.show(this, BuildConfig.FLAVOR, "Wait......");
- javascript - 使用 Angular 在 Ionic 中修改数组内的对象成员
- python - 服务器是否在主机“postgres_db”(10.10.0.4)上运行并接受端口 5434 上的 TCP/IP 连接?
- javascript - 在表单实际提交之前如何调用我的函数?