PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

soma hierárquica no PostgreSQL


No PostgreSQL você pode usar CTEs recursivas (Common Table Expression) para percorrer as árvores em suas consultas.

Aqui estão dois links relevantes para os documentos:

EDITAR

Como não há necessidade de subseleção, ele pode funcionar um pouco melhor em um conjunto de dados maior do que a consulta do 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;