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

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

目录

一,原题力扣链接

二,题干

三,建表语句

四,分析

五,SQL解答

解答一:用自连接解答

解答二,用子查询解答

六,验证

七,知识点总结


一,原题力扣链接

. - 力扣(LeetCode)

二,题干

表: Employee

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| name        | varchar |
| department  | varchar |
| managerId   | int     |
+-------------+---------+
id 是此表的主键(具有唯一值的列)。
该表的每一行表示雇员的名字、他们的部门和他们的经理的id。
如果managerId为空,则该员工没有经理。
没有员工会成为自己的管理者。

编写一个解决方案,找出至少有五个直接下属的经理。

以 任意顺序 返回结果表。

查询结果格式如下所示。

示例 1:

输入: 
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       |
+-----+-------+------------+-----------+
输出: 
+------+
| 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
  • 自连接转子查询
  • 子查询转自连接

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

  • 14
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值