如何解决在PostgreSQL中使用递归查询时如何使用聚合函数
在postgresql中对递归查询进行多次迭代时,运行以下查询时得到以下结果
WITH recursive report AS (
select a.name,a.id,a.parentid,sum(b.id)
from table1 a
INNER JOIN table2 b on a.id=b.table1id
GROUP by a.name,a.parentid
),report2 AS (
SELECT,0 as lvl
FROM report
WHERE parentid IS NULL
UNION ALL
SELECT child.,parent.lvl + 1
FROM report child
JOIN report2 parent
ON parent.id = child.parentid
)
select * from report2
我想对最高级别的 count 列求和,所以我的输出应如下所示,
获得它的最佳方法是什么。
解决方法
如果您在递归过程中计算路径,如下所示:
WITH recursive report AS (
select a.name,a.id,a.parentid,sum(b.id) -- Is summing b.id the right thing here?
from table1 a
INNER JOIN table2 b on a.id=b.table1id
GROUP by a.name,a.parentid
),report2 AS (
SELECT report.*,0 as lvl,array[report.id] as path_array
FROM report
WHERE parentid IS NULL
UNION ALL
SELECT child.*,parent.lvl + 1,report2.path_array||report.id
FROM report child
JOIN report2 parent
ON parent.id = child.parentid
)
select * from report2;
在sum(b.id)
CTE中,您的意思是count(*)
而不是report
吗?
使用此查询作为递归中的主要查询,您可以获得最高级别的sum
中的count
:
select t.name,sum(r.count) as total_count
from report2 r
join table1 t
on t.id = r.path_array[1]
group by t.name;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。