PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

somme hiérarchique dans PostgreSQL

Dans PostgreSQL, vous pouvez utiliser des CTE (Common Table Expression) récursifs pour parcourir les arbres dans vos requêtes.

Voici deux liens pertinents vers les documents :

MODIFIER

Étant donné qu'aucune sous-sélection n'est requise, elle peut fonctionner un peu mieux sur un ensemble de données plus volumineux que la requête d'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;