sql >> Databasteknik >  >> RDS >> PostgreSQL

Rekursiv SQL-sats (Postgresql) - förenklad version

Testinställningar:

CREATE TEMP TABLE matrix (
    rowindex integer,
    columnindex integer,
    matrixvalue numeric);

INSERT INTO matrix VALUES
 (1,1,2),(1,2,2),(1,3,3),(1,4,3),(1,5,4)
,(2,1,4),(2,2,4),(2,3,5),(2,4,6)
,(3,1,3),(3,2,2),(3,3,2)
,(4,1,2),(4,2,1)
,(5,1,1);

Kör INSERTs i en LOOP med DO :

DO $$
BEGIN

FOR i IN 2 .. 5 LOOP
   FOR j IN 7-i .. 5 LOOP
      INSERT INTO matrix
      VALUES (i,j, (
         SELECT sum(matrixvalue)/2
         FROM   matrix
         WHERE  (rowindex, columnindex) IN ((i-1, j),(i, j-1))
         ));
   END LOOP;
END LOOP;

END;
$$

Se resultat:

SELECT * FROM matrix order BY 1,2;


  1. mysql community server vs mysql installationsprogram

  2. Hur skapar jag en tillfällig tabell för att sortera samma kolumn efter två kriterier med hjälp av Djangos ORM?

  3. Vill du avbryta väntande AJAX-förfrågningar i PHP-appen?

  4. Optimera VÄLJ ... VAR I (...)