Trong PostgreSQL, bạn có thể sử dụng CTE đệ quy (Biểu thức bảng thông thường) để đi cây trong các truy vấn của mình.
Đây là hai liên kết có liên quan đến tài liệu:
CHỈNH SỬA
Vì không yêu cầu lựa chọn con nên nó có thể chạy tốt hơn một chút trên tập dữ liệu lớn hơn truy vấn của 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;