使用 rank() 更新 Postgresql 表

jon*_*ich 3 postgresql

我正在尝试pop_1_rank使用rank()类似这样的结果更新postgresql 表中的列 ( ) :

UPDATE database_final_form_merge
SET    
    pop_1_rank = r.rnk
FROM (
    SELECT pop_1, RANK() OVER ( ORDER BY pop_1 DESC) FROM database_final_form_merge WHERE territory_name != 'north'  AS rnk)r
Run Code Online (Sandbox Code Playgroud)

SELECT自行查询工作正常,但我不能让它正确地更新。我在这里做错了什么?

Jua*_*eza 5

我宁愿使用 CTE 表示法。

WITH cte as (
     SELECT pop_1, 
            RANK() OVER ( ORDER BY pop_1 DESC) AS rnk
     FROM database_final_form_merge 
     WHERE territory_name <> 'north'  
)
UPDATE database_final_form_merge 
SET pop_1_rank = cte.rnk
FROM cte
WHERE database_final_form_merge.pop_1 = cte.pop_1
Run Code Online (Sandbox Code Playgroud)