力扣高频SQL 50题(基础版)第三十一题
1731.每位经理的下属员工数量
题目说明
表:Employees
±------------±---------+
| Column Name | Type |
±------------±---------+
| employee_id | int |
| name | varchar |
| reports_to | int |
| age | int |
±------------±---------+
employee_id 是这个表中具有不同值的列。
该表包含员工以及需要听取他们汇报的上级经理的 ID 的信息。 有些员工不需要向任何人汇报(reports_to 为空)。
对于此问题,我们将至少有一个其他员工需要向他汇报的员工,视为一个经理。
编写一个解决方案来返回需要听取汇报的所有经理的 ID、名称、直接向该经理汇报的员工人数,以及这些员工的平均年龄,其中该平均年龄需要四舍五入到最接近的整数。
返回的结果集需要按照 employee_id
进行排序。
思路分析
使用自连接
实现过程
准备数据
Create table If Not Exists Employees(employee_id int, name varchar(20), reports_to int, age int)
Truncate table Employees
insert into Employees (employee_id, name, reports_to, age) values ('9', 'Hercy', 'None', '43')
insert into Employees (employee_id, name, reports_to, age) values ('6', 'Alice', '9', '41')
insert into Employees (employee_id, name, reports_to, age) values ('4', 'Bob', '9', '36')
insert into Employees (employee_id, name, reports_to, age) values ('2', 'Winston', 'None', '37')
实现方式
elect e1.employee_id,
e1.name,
count(e2.reports_to) reports_count,
round(avg(e2.age),0) average_age
from Employees e1 join Employees e2
on e1.employee_id=e2.reports_to group by e1.employee_id,e1.name order by e1.employee_id;
结果截图
e1.employee_id,e1.name order by e1.employee_id;
#### 结果截图
![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Ficnblocl7c16.feishu.cn%2Fspace%2Fapi%2Fbox%2Fstream%2Fdownload%2Fasynccode%2F%3Fcode%3DYWIyZmFkMjc4ZGE0NTNhOTVmNGJjNjdkOTAyOGM4NzBfQmR5YzEyT0U3bDlRYUc0bmN2Um15QXZNY09rbEhHWGpfVG9rZW46TXpDRGJWc1Brb242aWF4T0xLQWNmR3d5bkhlXzE3MjIzODY1OTA6MTcyMjM5MDE5MF9WNA&pos_id=img-mEwrz3s8-1722386716341)