select root_id,root_name,sum(amount) from (select connect_by_root(id) root_id,connect_by_root(name) root_name,amount from tmp where connect_by_isleaf=1 connectby prior id = parentid) group by root_id,root_name order by root_id;
解法二(使用内查询方式):
1
select id,parentid,name, (select sum(amount) from tmp a start with a.id=b.id connect by prior a.id=a.parentid ) sum_sal from tmp b order by 1;
基本思路都是利用 connect by 子句自根节点/分支节点往叶子结点搜索,找出不同的根节点/分支节点到叶子节点的路径再求和,修改一下解法一的子查询并查看一下结果集:
1
select connect_by_root(id) start_id,id leaf_id,amount from tmp where connect_by_isleaf=1 connect by prior id = parentid;