- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 训练:知识的实践应用
目次
一,原题力扣链接
二,题干
三,建表语句
四,分析
五,SQL解答
解答一:用自连接解答
解答二,用子查询解答
六,验证
七,知识点总结
一,原题力扣链接
. - 力扣(LeetCode)
二,题干
表: Employee
- +-------------+---------+
- | Column Name | Type |
- +-------------+---------+
- | id | int |
- | name | varchar |
- | department | varchar |
- | managerId | int |
- +-------------+---------+
- id 是此表的主键(具有唯一值的列)。
- 该表的每一行表示雇员的名字、他们的部门和他们的经理的id。
- 如果managerId为空,则该员工没有经理。
- 没有员工会成为自己的管理者。
复制代码
编写一个解决方案,找出至少有五个直接下属的经理。
以 恣意顺序 返回结果表。
查询结果格式如下所示。
示例 1:
- <strong>输入:</strong>
- Employee 表:
- +-----+-------+------------+-----------+
- | id | name | department | managerId |
- +-----+-------+------------+-----------+
- | 101 | John | A | Null |
- | 102 | Dan | A | 101 |
- | 103 | James | A | 101 |
- | 104 | Amy | A | 101 |
- | 105 | Anne | A | 101 |
- | 106 | Ron | B | 101 |
- +-----+-------+------------+-----------+
- <strong>输出:</strong>
- +------+
- | name |
- +------+
- | John |
- +------+
复制代码
三,建表语句
- Create table If Not Exists Employee (id int, name varchar(255), department varchar(255), managerId int);
- Truncate table Employee;
- insert into Employee (id, name, department, managerId) values ('101', 'John', 'A', null);
- insert into Employee (id, name, department, managerId) values ('102', 'Dan', 'A', '101');
- insert into Employee (id, name, department, managerId) values ('103', 'James', 'A', '101');
- insert into Employee (id, name, department, managerId) values ('104', 'Amy', 'A', '101');
- insert into Employee (id, name, department, managerId) values ('105', 'Anne', 'A', '101');
- insert into Employee (id, name, department, managerId) values ('106', 'Ron', 'B', '101');
复制代码 四,分析
题解:
员工表
有id,有姓名,有部分,有经理id
要求:查询雇员是经理,且他部下有5个以上的员工
思路 今日id 和员工id 可以用自链接查询 拼接2个表
当员工的id等于今日的id 那么这个员工就是领导
得到表如下:
条件 部属有大于5个人的
那么就今日的id分组 以员工的id聚合 count统计 大于5
求今日id 得到
根据经理id 用in 得到经理的名称 因为可能有很多个经理部属大于5个员工
得到最闭幕果
思路二:
查询员工表 以经理id分组 聚合员工的id 总人数 拿到经理的id
然后和思路一 一样拿到终极值
五,SQL解答
解答一:用自连接解答
- select name from employee where id in(
-
- select jingli.id from employee jingli join employee yuangong on jingli.id=yuangong.managerId
- group by jingli.id having count(yuangong.id)>=5);
复制代码 解答二,用子查询解答
- select name from employee where id in(
- select managerId from employee group by managerId having count(id)>=5);
复制代码
六,验证
七,知识点总结
- 自联结训练
- 子查询训练
- 分组求聚合训练
- count 函数训练
- 多个列比较 用in
- 自连接转子查询
- 子查询转自连接
- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 训练:知识的实践应用
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |