目录
题目
准备数据
分析数据
总结
题目
我们将至少有一个其他员工需要向他汇报的员工,视为一个经理。
返回需要听取汇报的所有经理的 ID、名称、直接向该经理汇报的员工人数,以及这些员工的平均年龄,其中该平均年龄需要四舍五入到最接近的整数。
返回的结果集需要按照 employee_id
进行排序。
准备数据
## 创建库
create database db;
use db;
## 创建表
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', null, '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', null, '37')
分析数据
Hercy 有两个需要向他汇报的员工, 他们是 Alice and Bob.
他们的平均年龄是 (41+36)/2 = 38.5, 四舍五入的结果是 39.
select e1.employee_id,e1.name,
count(e1.employee_id) as reports_count,
round(avg(e2.age)) as average_age
from Employees e1
join employees e2
on e1.employee_id = e2.reports_to
group by e1.employee_id, e1.name
having count(e2.reports_to) >=1
order by e1.employee_id;
总结
- 遇到这种同一张表中有上级id和员工id,需要使用自连接进行关联。
- 至少有一个其他员工需要向他汇报的员工,因此需要过滤条件count(e2.reports_to) >=1