hierarchische Summe in PostgreSQL

8

Dies ist eine vereinfachte Version eines Problems in PostgreSQL.

Ich habe die folgende Tabelle A :

[ID INTEGER | VALUE NUMERIC (10,2) | PARENT INTEGER ]

Dabei ist 'PARENT' eine auf sich selbst verweisende FK zur Spalten-ID.

Die Tabellendefinition lautet:

%Vor%

Diese einfache Tabelle erlaubt es, Baumdatenstrukturen beliebiger Tiefe zu definieren. Jetzt muss ich eine SQL schreiben (ich bevorzuge keine serverseitige PL-SQL), die für jeden Knoten den Gesamtwert des darunter liegenden Unterbaums "hängt". Zum Beispiel mit der folgenden Tabelle:

%Vor%

Ich sollte folgende Ergebnismenge erhalten:

%Vor%

Sie können einfach davon ausgehen, dass nur Blattknoten Werte haben, Nicht-Blattknoten in der Spalte VALUE immer den Wert NULL . Gibt es eine Möglichkeit, dies in SQL zu tun, sogar mit PostgreSQL-spezifischen Erweiterungen?

    
Marcus Junius Brutus 02.11.2012, 08:40
quelle

2 Antworten

5

In PostgreSQL können Sie rekursive CTEs (Common Table Expression) verwenden, um Bäume in Ihren Abfragen zu führen.

Hier sind zwei relevante Links in die Dokumente:

BEARBEITEN

Da kein Subselect erforderlich ist, kann es bei einem größeren Dataset etwas besser laufen als bei Arions Abfrage.

%Vor%     
A.H. 02.11.2012, 09:04
quelle
5

Vielleicht in etwa so:

%Vor%

Dies wird mit den Kindern beginnen, die keine Kinder haben. Dann geh auf den Baum zu den Eltern. Das Ergebnis wird wie folgt aussehen:

%Vor%     
Arion 02.11.2012 09:02
quelle