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

打印 上一主题 下一主题

主题 1002|帖子 1002|积分 3006


  • 学习:知识的初次邂逅
  • 复习:知识的温故知新
  • 训练:知识的实践应用
  
目次
一,原题力扣链接
二,题干
三,建表语句
四,分析
五,SQL解答
解答一:用自连接解答
解答二,用子查询解答
六,验证
七,知识点总结





一,原题力扣链接


. - 力扣(LeetCode)

二,题干

   表: Employee
  1. +-------------+---------+
  2. | Column Name | Type    |
  3. +-------------+---------+
  4. | id          | int     |
  5. | name        | varchar |
  6. | department  | varchar |
  7. | managerId   | int     |
  8. +-------------+---------+
  9. id 是此表的主键(具有唯一值的列)。
  10. 该表的每一行表示雇员的名字、他们的部门和他们的经理的id。
  11. 如果managerId为空,则该员工没有经理。
  12. 没有员工会成为自己的管理者。
复制代码

  编写一个解决方案,找出至少有五个直接下属的经理。
  以 恣意顺序 返回结果表。
  查询结果格式如下所示。
  
  示例 1:
  1. <strong>输入:</strong>
  2. Employee 表:
  3. +-----+-------+------------+-----------+
  4. | id  | name  | department | managerId |
  5. +-----+-------+------------+-----------+
  6. | 101 | John  | A          | Null      |
  7. | 102 | Dan   | A          | 101       |
  8. | 103 | James | A          | 101       |
  9. | 104 | Amy   | A          | 101       |
  10. | 105 | Anne  | A          | 101       |
  11. | 106 | Ron   | B          | 101       |
  12. +-----+-------+------------+-----------+
  13. <strong>输出:</strong>
  14. +------+
  15. | name |
  16. +------+
  17. | John |
  18. +------+
复制代码


三,建表语句

  1. Create table If Not Exists Employee (id int, name varchar(255), department varchar(255), managerId int);
  2. Truncate table Employee;
  3. insert into Employee (id, name, department, managerId) values ('101', 'John', 'A', null);
  4. insert into Employee (id, name, department, managerId) values ('102', 'Dan', 'A', '101');
  5. insert into Employee (id, name, department, managerId) values ('103', 'James', 'A', '101');
  6. insert into Employee (id, name, department, managerId) values ('104', 'Amy', 'A', '101');
  7. insert into Employee (id, name, department, managerId) values ('105', 'Anne', 'A', '101');
  8. 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解答

解答一:用自连接解答

  1. select name from employee where id in(
  2. select jingli.id from employee jingli join employee yuangong on jingli.id=yuangong.managerId
  3. group by jingli.id having count(yuangong.id)>=5);
复制代码
解答二,用子查询解答

  1. select name from employee where id in(
  2. select managerId from employee group by managerId having count(id)>=5);
复制代码
 


六,验证





七,知识点总结

   

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



   

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

老婆出轨

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表