PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

hierarchische Summe in PostgreSQL

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

Hier sind zwei relevante Links zu den Dokumenten:

BEARBEITEN

Da keine Unterauswahl erforderlich ist, läuft sie bei einem größeren Datensatz möglicherweise etwas besser als die Abfrage von 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;