sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLの階層合計

    PostgreSQLでは、再帰CTE(共通テーブル式)を使用して、クエリ内のツリーをウォークできます。

    ドキュメントへの2つの関連リンクは次のとおりです。

    編集

    副選択は必要ないため、Arionのクエリよりも大きなデータセットで実行する方が少し良いかもしれません。

    WITH RECURSIVE children AS (
        -- select leaf nodes
        SELECT id, value, parent
            FROM t
            WHERE value IS NOT NULL
        UNION ALL
        -- propagate values of leaf nodes up, adding rows 
        SELECT t.id, children.value, t.parent
            FROM children JOIN t ON children.parent = t.id
    )
    SELECT id, sum(value) 
        FROM children 
        GROUP BY id   -- sum up appropriate rows
        ORDER BY id;
    


    1. 非推奨:mysql_pconnect():

    2. 名前のない外部キーをMySqlにドロップします

    3. ストアドプロシージャで出力パラメータサイズを定義するにはどうすればよいですか?

    4. SQL Server(T-SQL)で日付から月を抽出する3つの方法