PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Рекурсивен SQL оператор (Postgresql) - опростена версия

Тестова настройка:

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);

Изпълнете INSERTs в LOOP с 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;
$$

Вижте резултата:

SELECT * FROM matrix order BY 1,2;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Кога да използваме наследени таблици в PostgreSQL?

  2. Правилният начин за използване НЕ В Postgres

  3. Как да стартирате Jasmine beforeAll за всички тестови файлове

  4. Намерете абонати, които не са се абонирали отново в рамките на прага на стария абонамент

  5. Добавете ограничение, за да направите колоната уникална за група редове