我有一个表'新娘',其中包含一些字符串值:
id name order
------- ------- -------
1 Beatrix
2 Bill
3 ORen
4 Vernita
5 Elle
6 Budd
我想根据排序'name'列的顺序,用数字(从1开始)更新列'order'。像那样:
id name order
------- ------- -------
1 Beatrix 1
2 Bill 2
3 ORen 5
4 Vernita 6
5 Elle 4
6 Budd 3
我的问题是如何使用排序的名称作为插入实际订单号的顺序。任何帮助都会很棒。
答案 0 :(得分:6)
这可以使用window function:
来完成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;
order
是保留关键字。您不应将其用作列名。
答案 1 :(得分:3)
您应该可以使用窗口函数: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