大家好我想问一下postgresql,当你有一些元素表来获得更多级别的后代时,可能是获得列总和的最佳查询。
ID id_parent 值
1 空 3
2 空 4
3 1 2
4 2 3
5 3 4
6 3 2
7 4 5
8 4 7
所以结果将是所有树的总和的行如下
ids 5和6的值一起是6加上他们的父母的价值是8加上他的父母将是11,对于id为7和8的项目也是如此,所以id = 2的祖父母将具有值19
ID id_parent 值
1 空 11
2 空 19
提前致谢
答案 0 :(得分:2)
使用递归CTE:
with recursive cte as (
select t.id, t.value, ultimate_parent as id
from t
where id_parent is null
union all
select t.id, t.value, cte.ultimate_parent
from cte join
t
on t.id_parent = cte.id
)
select ultimate_parent, sum(value)
from cte
group by ultimate_parent;
递归部分以最终父母开头 - 父母为NULL
的记录。然后逐步引入较低级别,保持最终父母的身份。
最终聚合只是将值加在一起。