我可以执行类似于select *, rank() over (partition by column1 order by column2) from mytable
的窗口函数来获取按column2
排序的行的顺序。但是,如果我在order_column
上添加了列mytable
,我如何UPDATE
将该列包括窗口函数的结果,以便填充新的order_column
结果吗?
因此它将更新mytable
中的所有现有行,但不会添加任何新行。
答案 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被命名为其他名称,请更改查询中使用的名称。如果您的表没有主键,请添加一个。