返回介绍

solution / 1700-1799 / 1731.The Number of Employees Which Report to Each Employee / README

发布于 2024-06-17 01:03:15 字数 2072 浏览 0 评论 0 收藏 0

1731. 每位经理的下属员工数量

English Version

题目描述

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.

解法

方法一:自连接 + 分组统计

我们可以通过自连接的方式,将每个员工的上级经理信息连接到每个员工的信息上,然后再通过分组统计的方式,统计每个经理的下属员工数量和平均年龄。

# Write your MySQL query statement below
SELECT
  e2.employee_id,
  e2.name,
  COUNT(1) AS reports_count,
  ROUND(AVG(e1.age)) AS average_age
FROM
  Employees AS e1
  JOIN Employees AS e2 ON e1.reports_to = e2.employee_id
GROUP BY 1
ORDER BY 1;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文