570. 至少有5名直接下属的经理

it2024-04-06  53

Employee 表包含所有员工和他们的经理。每个员工都有一个 Id,并且还有一列是经理的 Id。

+------+----------+-----------+----------+ |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 | +------+----------+-----------+----------+

给定 Employee 表,请编写一个SQL查询来查找至少有5名直接下属的经理。对于上表,您的SQL查询应该返回:

+-------+ | Name | +-------+ | John | +-------+ 注意: 没有人是自己的下属。

题目条件

# MySQL DROP TABLE IF EXISTS `employee`; CREATE TABLE `employee` ( `Id` int(11) DEFAULT NULL, `Name` varchar(20) COLLATE utf8_bin DEFAULT NULL, `Department` varchar(20) COLLATE utf8_bin DEFAULT NULL, `ManagerId` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; /*Data for the table `employee` */ insert into `employee`(`Id`,`Name`,`Department`,`ManagerId`) values (101,'John ','A',NULL),(102,'Dan','A',101),(103,'James','A',101),(104,'Amy','A',101),(105,'Anne','A',101),(106,'Ron','B',101);

使用count()函数和group by分句

算法

首先,我们只需使用count()函数对 ManagerId 列就可以获取拥有 5 个以上直接下属的经理的 ID,做临时表e。然后,根据临时表e中经理的ID,在Employee 表中查找拥有 5 个以上直接下属经理的名字(Name属性)即可。 # MySQL SELECT `Name` FROM`employee` WHERE `Id` IN (SELECT `ManagerId` FROM (SELECT `ManagerId`,COUNT(`ManagerId`) FROM`employee` GROUP BY `ManagerId`) AS e) ;

结果

来源:力扣(LeetCode)

上一题:182. 查找/删除重复的电子邮箱

最新回复(0)