在第二个级别访问总数Postgres分层查询实践

问题描述

我在Postgres上练习,并且坚持我找不到实现方法的观点。我有一个简单的数据库,它们是以下属性

CREATE TABLE public.department
(
"deptId" integer NOT NULL PRIMARY KEY,name character varying(30) COLLATE pg_catalog."default" NOT NULL,"parentId" integer,"numEmpl" integer NOT NULL,CONSTRAINT "department_parentId_fkey" FOREIGN KEY ("parentId")
    REFERENCES public.department ("deptId") MATCH SIMPLE
    ON UPDATE NO ACTION
    ON DELETE NO ACTION
)

然后表中有一些数据。简短的例子是

insert into department values (1,'Headquarter',1,10);
insert into department values (2,'Sales',15);
insert into department values (3,'Logistics',25);
                      ...

我试图获取每个二级部门的员工总数。

我能够获得每个部门的雇员总数,但是根据我在互联网上的搜索,使用“分层查询”可以做到这一点。目前,我正在使用

parentId=1

查询

有什么解决方案吗?谢谢。

解决方法

这里是一种选择:

with recursive cte as (
    select deptid as rootid,deptid from department where parentid = 1 and deptid <> 1
    union all
    select c.rootid,d.deptid
    from cte c
    inner join department d on d.parentid = c.deptid and d.deptid <> 1
)
select rootid,count(*) cnt from cte group by rootid