2 Stimmen

Eine Abfrage zur Zusammenfassung von Daten in Teilbäumen?

Meine Daten passen natürlich in eine Baumform. Daher habe ich eine einfache SQL-Tabelle zum Speichern der Daten: {id, parentid, data1, ..., dataN}

Ich möchte in die Daten "hineinzoomen" können und einen Bericht erstellen, der die Daten unterhalb der aktuellen Verzweigung zusammenfasst. Das heißt, wenn ich in der Wurzel stehe, möchte ich die Gesamtzahlen aller Daten haben. Wenn ich einen bestimmten Zweig des Baumes hinuntergefahren bin, möchte ich nur die Summe der Daten haben, die nur für diesen Knoten und seine Unterknoten gefunden wurden.

Wie kann ich eine solche Abfrage in SQL schreiben?

Vielen Dank im Voraus!

/Johannes

2voto

vladr Punkte 63255

Seit sqlite unterstützt nicht CONNECT BY können Sie diese Berechnung nicht in einer einzigen Abfrage durchführen, es sei denn, Sie verwenden verschachtelte Mengen oder materialisierte Pfade für Ihre Daten.

Alternativ können Sie es auch "auf die harte Tour" machen und Ihren Baum rekursiv durchlaufen, indem Sie eine Abfrage für jeden untergeordneten Knoten durchführen, beginnend mit dem übergeordneten Knoten von Interesse.

Siehe auch:

0 Stimmen

Ich dachte daran, die Kinder rekursiv zu durchlaufen, hoffte aber auf eine sofort einsatzbereite Lösung mit SQL. Nachdem ich über materialisierte Pfade gelesen hatte, war mir sofort klar, dass dies die perfekte Lösung für mein Problem sein würde! Es wird trivial zu implementieren sein :-) Vielen Dank! /John

1voto

Tom H Punkte 45699

Vlads Hinweis auf verschachtelte Sets sieht ziemlich gut aus. Wenn Sie etwas suchen, das Bäume und Hierarchien detaillierter behandelt, dann können Sie sich auch Folgendes ansehen Joe Celkos Buch .

Das Modell der "ID, ParentID"-Adjazenzliste ist eigentlich eine "altmodische" Art der Betrachtung von Hierarchien in einem relationalen Datenbankmodell.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X