随笔 - 384  文章 - 0  评论 - 0  阅读 - 13万

力扣570(MySQL)-至少有5名直接下属的经理(简单)

题目:

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

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

 注意:
没有人是自己的下属。

解题思路:

方法一:

使用子查询,先按经理id分组,过滤掉少于5个人的数据得到临时表,再用原表进行连接,取出姓名。

①子查询

1 select managerId
2 from employee
3 group by managerId
4 having count(*) >= 5;

 ②连接查询,取出姓名。

1 select name
2 from employee e1
3 join (select managerId
4         from employee
5         group by managerId
6         having count(*) >= 5
7 ) e2
8 on e1.id = e2.managerId;

 方法二:自连接

①先将表自连接

1 select *
2 from employee e1
3 join employee e2
4 on e1.id = e2.managerId

 ②将查询出来的表进行筛选,以e1表中的name进行分组,并且分组后要数量多于5条的name。

1 select e1.name
2 from employee e1
3 join employee e2
4 on e1.id = e2.managerId
5 group by e1.name
6 having count(*) >= 5;

 注意:

where 和 having 的区别:如果想在分组后再次进行条件筛选,使用having关键字

1.WHERE在分组前使用, HAVING在分组后使用;

2.运算顺序:WHERE 优先于 HAVING;

3.作用对象不同:WHERE只作用于表,而HAVING作用于GROUP BY子句的分组结果,如果不存在GROUP BY子句,则作用于WHERE子句的搜索结果,如果where子句也没有,则作用于表;

4.计算对象不同:HAVING用于组的计算,WHERE计算指定字段的每条记录;

通俗的话:凡是表里没有这个字段的时候(自造的字段)就必须用HAVING,否则建议使用WHERE,它的性能更优。

posted on   我不想一直当菜鸟  阅读(221)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示