老婆出轨 发表于 2024-8-28 08:40:03

25,SQL训练之,力扣,570. 至少有5名直接下属的经理


[*]学习:知识的初次邂逅
[*]复习:知识的温故知新
[*] 训练:知识的实践应用

目次
一,原题力扣链接
二,题干
三,建表语句
四,分析
五,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 那么这个员工就是领导
得到表如下:
https://i-blog.csdnimg.cn/direct/fa1e8a70346c48d9b27442d4322b37ad.png
条件 部属有大于5个人的
那么就今日的id分组 以员工的id聚合 count统计 大于5
求今日id 得到
https://i-blog.csdnimg.cn/direct/4a553d39a989453c8c25c78263f2980e.png
根据经理id  用in 得到经理的名称 因为可能有很多个经理部属大于5个员工
得到最闭幕果
https://i-blog.csdnimg.cn/direct/a61c59fc7c534a9083b6d84c3bcd0961.png
思路二:
查询员工表 以经理id分组 聚合员工的id 总人数  拿到经理的id
https://i-blog.csdnimg.cn/direct/601ccdcf1d8641b1840f3181bbcf4320.png
然后和思路一 一样拿到终极值
https://i-blog.csdnimg.cn/direct/dbed399838d8465a98f3114585ab13c0.png


五,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);  


六,验证

https://i-blog.csdnimg.cn/direct/8e1115ebc3c7403697ad57ff54c091db.png
https://i-blog.csdnimg.cn/direct/8bf19c54e1e64411926f0989880bb73d.png


七,知识点总结

   

[*]自联结训练
[*]子查询训练
[*]分组求聚合训练
[*]count 函数训练
[*]多个列比较 用in
[*]自连接转子查询
[*]子查询转自连接




   

[*]学习:知识的初次邂逅
[*]复习:知识的温故知新
[*] 训练:知识的实践应用

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 25,SQL训练之,力扣,570. 至少有5名直接下属的经理