Postgresql:使用升序值更新column1,具体取决于column2排序顺序

时间:2016-02-25 09:46:34

标签: sql postgresql sql-update

我有一个表'新娘',其中包含一些字符串值:

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

我的问题是如何使用排序的名称作为插入实际订单号的顺序。任何帮助都会很棒。

2 个答案:

答案 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