如何在postgres中更新表格以添加订单列?

时间:2020-04-19 07:58:49

标签: sql postgresql window-functions

我可以执行类似于select *, rank() over (partition by column1 order by column2) from mytable的窗口函数来获取按column2排序的行的顺序。但是,如果我在order_column上添加了列mytable,我如何UPDATE将该列包括窗口函数的结果,以便填充新的order_column结果吗?

因此它将更新mytable中的所有现有行,但不会添加任何新行。

1 个答案:

答案 0 :(得分:0)

您可能不应该这样做,因为您的订单列实际上只是从表的其余部分派生的数据,并且在更改任何数据后可能会使其无效。话虽如此,如果您必须执行此操作,则更新连接将是一种选择:

UPDATE mytable AS t1
SET order_column = t2.rnk
FROM
(
    SELECT *, RANK() OVER (PARTITION BY column1 ORDER BY column2) rnk
    FROM mytable
) t2
WHERE t1.id = t2.id;

我在这里假设您的表具有主键列id。如果PK被命名为其他名称,请更改查询中使用的名称。如果您的表没有主键,请添加一个。