leetcode-sql数据库面试题冲刺(高频SQL五十题)

题目:

570.至少有5名直接下属的经理
表: 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 |
±-----+

思路:

这道题就是很常规的做法,自连接,子查询都行,解法有很多种,大家可以多探索。

代码:

A:

select a.name from employee a left join employee b
on a.id=b.managerid 
group by a.id
having count(b.managerid)>=5

B:

SELECT e2.name
FROM Employee AS e2
WHERE e2.id IN 
(
SELECT e1.managerId
FROM Employee AS e1
GROUP BY managerId
HAVING COUNT(*) >= 5
)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值