Using window functions in an update statement

前端 未结 1 980
庸人自扰
庸人自扰 2020-12-13 17:58

I have a large PostgreSQL table which I access through Django. Because Django\'s ORM does not support window functions, I need to bake the results of a window function into

相关标签:
1条回答
  • 2020-12-13 18:37

    The error is from postgres not django. You can rewrite this as:

    WITH v_table_name AS
    (
        SELECT row_number() over (partition by col2 order by col3) AS rn, primary_key
        FROM table_name
    ) 
    UPDATE table_name set table_name.col1 = v_table_name.rn
    FROM v_table_name
    WHERE table_name.primary_key = v_table_name.primary_key;  
    

    Or alternatively:

    UPDATE table_name set table_name.col1 = v_table_name.rn
    FROM  
    (
        SELECT row_number() over (partition by col2 order by col3) AS rn, primary_key
        FROM table_name
    ) AS v_table_name
    WHERE table_name.primary_key = v_table_name.primary_key;
    

    This works. Just tested it on postgres-9.6. Here is the syntax for UPDATE (see the optional fromlist).

    Hope this helps.

    0 讨论(0)
提交回复
热议问题