sql >> Databáze >  >> RDS >> PostgreSQL

Použití funkcí okna v příkazu aktualizace

Chyba pochází od postgresu, ne od djanga. Můžete to přepsat jako:

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;  

Nebo alternativně:

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;

Tohle funguje. Právě jsem to testoval na postgres-9.6. Zde je syntaxe pro UPDATE (viz volitelný fromlist ).

Doufám, že to pomůže.




  1. Jak zjistit, zda je vypočítaný sloupec deterministický na serveru SQL Server

  2. SQL AVG() pro začátečníky

  3. PolyScale.ai – Škálování MySQL a PostgreSQL pomocí globálního ukládání do mezipaměti

  4. Jak se spouštějí paralelní plány – část 5