PostgreSQLでは、再帰CTE(共通テーブル式)を使用して、クエリ内のツリーをウォークできます。
ドキュメントへの2つの関連リンクは次のとおりです。
編集
副選択は必要ないため、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;