Amb*_*ran 3 sql postgresql sql-update
我有一个表'新娘',有一些像这样的字符串值:
id name order
------- ------- -------
1 Beatrix
2 Bill
3 ORen
4 Vernita
5 Elle
6 Budd
Run Code Online (Sandbox Code Playgroud)
我想根据排序'name'列的顺序,用数字(从1开始)更新列'order'.像那样:
id name order
------- ------- -------
1 Beatrix 1
2 Bill 2
3 ORen 5
4 Vernita 6
5 Elle 4
6 Budd 3
Run Code Online (Sandbox Code Playgroud)
我的问题是如何使用排序的名称作为插入实际订单号的顺序.任何帮助都会很棒.
这可以使用窗口函数完成:
update the_table
set "order" = t.rn
from (
select id,
row_number() over (order by name) as rn
from the_table
) t where t.id = the_table.id;
Run Code Online (Sandbox Code Playgroud)
order是保留关键字.您不应将其用作列名.
您应该能够为此使用窗口函数:http://www.postgresql.org/docs/9.1/static/tutorial-window.html
像这样的东西(我没有安装 postgres,所以我在 SQL Server 中尝试过这个;如果不相同的话,它应该非常相似):
update bride set [order] = sort
from (select id, name, rank() over (order by name) sort
from bride) o
where bride.id = o.id
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
899 次 |
| 最近记录: |