每位经理的下属员工数量
Table: Employees
+-------------+----------+
| Column Name | Type |
+-------------+----------+
| employee_id | int |
| name | varchar |
| reports_to | int |
| age | int |
+-------------+----------+
employee_id 是这个表的主键.
该表包含员工以及需要听取他们汇报的上级经理的ID的信息。 有些员工不需要向任何人汇报(reports_to 为空)。
对于此问题,我们将至少有一个其他员工需要向他汇报的员工,视为一个经理。
编写SQL查询需要听取汇报的所有经理的ID、名称、直接向该经理汇报的员工人数,以及这些员工的平均年龄,其中该平均年龄需要四舍五入到最接近的整数。
返回的结果集需要按照 employee_id 进行排序。
查询结果的格式如下:
Employees table:
+-------------+---------+------------+-----+
| employee_id | name | reports_to | age |
+-------------+---------+------------+-----+
| 9 | Hercy | null | 43 |
| 6 | Alice | 9 | 41 |
| 4 | Bob | 9 | 36 |
| 2 | Winston | null | 37 |
+-------------+---------+------------+-----+
Result table:
+-------------+-------+---------------+-------------+
| employee_id | name | reports_count | average_age |
+-------------+-------+---------------+-------------+
| 9 | Hercy | 2 | 39 |
+-------------+-------+---------------+-------------+
Hercy 有两个需要向他汇报的员工, 他们是 Alice and Bob. 他们的平均年龄是 (41+36)/2 = 38.5, 四舍五入的结果是 39.
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/the-number-of-employees-which-report-to-each-employee
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
**最基础查询**
select employee_id,name,reports_to,age from Employees
**根据员工reports_to对应某位员工(经理)employee_id,进行连接**
**m作为基表进行连接**
select employee_id,name,
reports_to reports_count,
age average_age
from Employees e
join Employees m
on e.reports_to = m.employee_id
**count函数统计,round函数四舍五入,avg函数根据某一列数值总和除以列数**
**根据m表的employee_id进行分组,并且对查询结果employee_id进行排序显示**
**最终sql语句**
select m.employee_id,m.name,
count(*) reports_count ,
round(avg(e.age)) average_age
from Employees e
join Employees m
on e.reports_to = m.employee_id
group by m.employee_id
order by employee_id