You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算员工层级结构中顶级管理者的下属总人数?

解决方案:统计顶级管理者的下属总数

递归CTE实现(推荐)

对于树形层级的员工关系,递归CTE(Common Table Expression)是最直观且符合ANSI标准的实现方式,适用于MySQL 8.0+、PostgreSQL、SQL Server等主流数据库:

WITH RECURSIVE employee_hierarchy AS (
    -- 锚点成员:筛选所有顶级管理者
    SELECT 
        id AS top_manager_id,
        name AS top_manager_name,
        id AS employee_id
    FROM employees
    WHERE managerId IS NULL
    
    UNION ALL
    
    -- 递归成员:逐层获取所有下属
    SELECT 
        eh.top_manager_id,
        eh.top_manager_name,
        e.id AS employee_id
    FROM employee_hierarchy eh
    JOIN employees e ON e.managerId = eh.employee_id
)
SELECT 
    top_manager_id AS id,
    top_manager_name AS name,
    COUNT(employee_id) - 1 AS `number of employees`
FROM employee_hierarchy
GROUP BY top_manager_id, top_manager_name
ORDER BY top_manager_id;

代码说明

  1. 锚点成员:先选出所有managerId为NULL的顶级管理者,同时记录他们的ID、姓名,并将自身ID作为初始的员工ID(后续递归会基于此拓展下属)。
  2. 递归成员:通过关联当前层级的employee_id与下一层员工的managerId,不断遍历所有下属节点,直到没有更多下属为止。
  3. 统计逻辑:COUNT(employee_id) - 1是因为锚点成员包含了管理者自身,减去1后得到的就是纯下属的数量。

其他可选方案

预计算层级字段

如果你的数据集非常庞大且层级结构相对稳定,可以在表中新增一个top_manager_id字段,每次新增/更新员工时,通过触发器或应用层逻辑直接维护该字段(记录员工所属的顶级管理者ID)。之后统计时只需简单分组:

SELECT 
    e.id,
    e.name,
    COUNT(sub.id) AS `number of employees`
FROM employees e
LEFT JOIN employees sub ON sub.top_manager_id = e.id
WHERE e.managerId IS NULL
GROUP BY e.id, e.name
ORDER BY e.id;

这种方式查询效率极高,但需要额外的维护成本,适合数据变更不频繁的场景。

数据库特定语法

部分数据库支持专属的层级查询语法,比如Oracle的CONNECT BY:

SELECT 
    top_manager_id AS id,
    top_manager_name AS name,
    COUNT(employee_id) - 1 AS `number of employees`
FROM (
    SELECT 
        CONNECT_BY_ROOT id AS top_manager_id,
        CONNECT_BY_ROOT name AS top_manager_name,
        id AS employee_id
    FROM employees
    START WITH managerId IS NULL
    CONNECT BY PRIOR id = managerId
)
GROUP BY top_manager_id, top_manager_name
ORDER BY top_manager_id;

但这种语法兼容性较差,不如递归CTE通用。

内容的提问来源于stack exchange,提问作者Harper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 03:27:25