力扣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 的区别:
1.WHERE在分组前使用, HAVING在分组后使用;
2.运算顺序:WHERE 优先于 HAVING;
3.作用对象不同:WHERE只作用于表,而HAVING作用于GROUP BY子句的分组结果,如果不存在GROUP BY子句,则作用于WHERE子句的搜索结果,如果where子句也没有,则作用于表;
4.计算对象不同:HAVING用于组的计算,WHERE计算指定字段的每条记录;
标签:
MySQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)