订阅更新

至少有 5 个直接下属的经理

SQL 实战 123 题 · 第 19 题 中等 约 2 分钟读完

LeetCode 570 · 分组计数、IN 子查询、自连接

本文目录
  1. 面试怎么回答
  2. 题意
  3. 表结构
  4. 思路
  5. 参考解法
  6. 易错点

面试怎么回答

先 GROUP BY ManagerId 加 HAVING COUNT(*) >= 5 得到经理 ID,再用 IN 或 JOIN 回员工表取姓名。我会顺手排除 ManagerId 为空的分组。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

题意

员工表记录了每个员工的经理 ID。找出直接下属不少于 5 人的经理姓名。

表结构

  • Employee:Id(主键)、Name、Department、ManagerId

思路

按 ManagerId 分组计数,HAVING 筛出下属数 ≥ 5 的经理 ID,再到员工表里取这些 ID 的姓名。也可以把分组结果和员工表 JOIN。

参考解法

select Name
from Employee
where Id in (
select ManagerId
from Employee
group by ManagerId
having count(*)>=5
)

易错点

  • ManagerId 为 NULL 的员工也会形成一组,如果顶层员工很多可能被误判;可以加 WHERE ManagerId IS NOT NULL。
刷题进度保存在当前浏览器