Postgresql查询获取树的总和

时间:2016-12-09 22:37:40

标签: sql postgresql

大家好我想问一下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

提前致谢

1 个答案:

答案 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的记录。然后逐步引入较低级别,保持最终父母的身份。

最终聚合只是将值加在一起。