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

    DOを使用してLOOPでINSERTを実行します :

    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. PDOで準備された挿入後に最後の挿入IDを取得します

    2. 順序付きリストをデータベースに保存する最良の方法は?

    3. イベントの待機:非同期記述子のサイズ変更

    4. SQL:各グループのN番目のアイテムを取得します