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

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)

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

a_h*_*ame 6

这可以使用窗口函数完成:

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是保留关键字.您不应将其用作列名.


cf_*_*_en 5

您应该能够为此使用窗口函数: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)