【问题标题】:Postgresql: Update column1 with ascending values, depending on column2 sort orderPostgresql:使用升序值更新 column1,具体取决于 column2 排序顺序
【发布时间】:2016-02-25 09:46:34
【问题描述】:

我有一个表“新娘”,其中包含一些类似的字符串值:

id       name     order
-------  -------  -------
1        Beatrix 
2        Bill 
3        ORen
4        Vernita
5        Elle 
6        Budd

我想根据“名称”列的排序顺序用数字(从 1 开始)更新“顺序”列。像这样:

id       name     order
-------  -------  -------
1        Beatrix  1
2        Bill     2
3        ORen     5
4        Vernita  6
5        Elle     4
6        Budd     3

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

【问题讨论】:

    标签: sql postgresql sql-update


    【解决方案1】:

    这可以使用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 是保留关键字。您不应将其用作列名。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-18
        • 1970-01-01
        • 2021-06-06
        • 2020-03-17
        • 1970-01-01
        • 2018-02-20
        • 2015-05-31
        • 2015-09-29
        相关资源
        最近更新 更多