MySQL练手 --- 570.至少有5名直接下属的经理

题目链接: 570.至少有5名直接下属的经理

方法一:

思路

由题意可知,所有员工(不管普通员工还是经理)都在一张表中(Employee),很显然,表的关联关系为 自我引用。这时首选 多表查询中的 JOIN 连接,然后添加过滤条件。

解题过程

题目要求:找出至少有五个直接下属的经理,首先利用匹配字段 e1.id = e2.managerId 进行连接(使用 e1.id = e2.managerId 就会筛选出经理)。连接类型选择左连接,为啥使用左连接呢?因为要弄出所有员工的信息,可是直接筛选出经理不好嘛?(有道理,其实直接用JOIN更好,而不是使用LEFT JOIN

SELECT *
FROM Employee e1
LEFT JOIN Employee e2
ON e1.id = e2.managerId

在这里插入图片描述

查看结果记录表,总结出过滤条件,对name进行分组(GROUP BY e1.name),然后判断name的数量是否大于5(MIN(name) >= 5),额…其实这是个坑,表中唯一的主键是id,所以经理可以有多个id。所以对name进行过滤改为对id进行过滤即可。

Code

SELECT e1.name
FROM Employee e1
LEFT JOIN Employee e2
ON e1.id = e2.managerId
GROUP BY e1.id
HAVING COUNT(e1.id) >= 5;

方法二:

思路

不使用JOIN,但还是多表查询, FROM Employee e1, Employee e2 其实也是笛卡尔积,关于更多 FROM Employee e1, Employee e2 的小秘密,请移步至 MySQL零散拾遗(六)---- 对 FROM table1,table2 要点进行详细介绍

解题过程

题目要求:找出至少有五个直接下属的经理,直接使用 e1.id = e2.managerId 就会筛选出经理。再判断是否满足经理的要求即可

Code

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值