问题描述
我在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