这是我正在应对的挑战:
组织的员工数据定义如下:
TABLE employees id INTEGER PRIMARY KEY name VARCHAR(255) NOT NULL managerId VARCHAR(255)
每个员工要么有一名经理,要么没有。经理也可以有经理,层次结构可以扩展多个级别。顶级经理在他们之上没有经理(managerId 为空)。managerId 为空的所有员工,无论其下属是否有员工,都是顶级经理。
编写一个返回的查询:
- 顶级经理的 ID。
- 他们下属的员工总数。
- 任何没有员工的高层管理人员都不应被退回。
您正在描述分层数据结构。您通常会使用递归查询遍历它。确切的语法因数据库而异(并非所有数据库/版本都支持递归查询),但一个想法是:
with recursive cte (root_id, id) as (
select id, id from employees where managerid is null
union all
select c.root_id, e.id
from cte c
inner join employees e on e.managerid = c.id
)
select root_id, count(*) - 1 no_employees
from cte
group by root_id
having count(*) > 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句