これは、私が PostgreSQL で遭遇した問題の単純化されたバージョンです。
次のテーブルAがあります。
[ ID 整数 | 値 NUMERIC(10,2 ) | 親 整数 ]
「PARENT」は、列 ID への自己参照 FK です。
テーブル定義は次のとおりです。
CREATE TABLE A(ID INTEGER IDENTITY, VALUE NUMERIC(10,2), PARENT INTEGER)
ALTER TABLE A ADD CONSTRAINT FK FOREIGN KEY (PARENT) REFERENCES A(ID)
この単純なテーブルにより、任意の深さのツリー データ構造を定義できます。ここで、ノードごとに、その下に「ぶら下がっている」サブツリーの合計値を報告する SQL を作成する必要があります (サーバー側の PL-SQL は使用しない方がよいと思います)。たとえば、次の表を使用します。
| ID | VALUE | PARENT |
-------------------------
| 1 | NULL | NULL |
| 2 | 3.50 | 1 |
| 3 | NULL | NULL |
| 4 | NULL | 3 |
| 5 | 1.50 | 4 |
| 6 | 2.20 | 4 |
次の結果セットを取得する必要があります。
| ID | Total-Value-of-Subtree |
| 1 | 3.50 |
| 2 | 3.50 |
| 3 | 3.70 |
| 4 | 3.70 |
| 5 | 1.50 |
| 6 | 2.20 |
簡単に言うと、葉ノードのみが値を持ち、葉以外のノードは常にVALUE列にNULLの値を持つと仮定できます。PostgreSQL 固有の拡張機能を利用しても、SQL でこれを行う方法はありますか?