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

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

说在前面

🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。

题目描述

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.

解题思路

该查询语句主要包含以下几个部分:

  • SELECT:用于指定要查询的列,包括员工编号 employee_id、姓名 name、下属数量 reports_count 和平均年龄 average_age。
  • FROM:用于指定要查询的表,此处为名为 “Employees” 的表。
  • INNER JOIN:用于将 “Employees” 表与自身进行内连接操作,将员工的编号与其下属的上司编号进行匹配。
  • ON:用于指定连接条件,即员工的编号与其下属的上司编号相等。
  • GROUP BY:用于按照员工编号对查询结果进行分组。
  • ORDER BY:用于按照员工编号对查询结果进行排序,默认为升序排序。

AC代码

select a.employee_id as 'employee_id', a.name as 'name', count(b.employee_id) as 'reports_count', round(avg(b.age), 0) as 'average_age'
from Employees a inner join Employees b
on a.employee_id = b.reports_to
group by a.employee_id
order by a.employee_id

公众号

关注公众号『前端也能这么有趣』,获取更多有趣内容。

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

相关文章
深度学习之动作识别与分类
基于深度学习的动作识别与分类是指通过深度学习模型从视频或传感器数据中自动识别和分类人类动作的过程。这项技术广泛应用于视频监控、安全监控、体育分析、医疗康复、虚拟现实(VR)和增强现实(AR)等领域。
389 1
文件上传绕过】——解析漏洞_IIS6.0解析漏洞
文件上传绕过】——解析漏洞_IIS6.0解析漏洞
334 4
探索机器学习在金融欺诈检测中的应用
【5月更文挑战第30天】在金融交易的复杂网络中,欺诈行为日益猖獗,传统的检测方法逐渐显得力不从心。随着人工智能技术的飞速发展,机器学习因其强大的数据分析和模式识别能力成为打击金融欺诈的新利器。本文将深入探讨机器学习在金融欺诈检测领域的应用情况,分析其优势与挑战,并展望其在未来的发展前景。
Ubuntu 22.04LTS版本二进制部署K8S 1.30+版本
这篇文章详细介绍了在Ubuntu 22.04 LTS系统上使用VMware Fusion虚拟化软件部署Kubernetes 1.30+版本的完整过程,包括环境准备、安装containerd、配置etcd、生成证书、部署高可用组件、启动Kubernetes核心组件以及网络插件的部署和故障排查。
542 5
1688 商品采集数据,1688 商品详情数据接口
1688开放平台提供的商品详情数据接口,允许第三方开发者获取平台上商品的详细信息,助力企业实现精准市场分析、优化供应链管理和个性化客户服务。开发者需注册账号并申请权限,通过HTTP请求调用接口,获取JSON格式的数据,涵盖商品基本信息、图片、属性及店铺信息。使用时需注意权限管理、调用频率限制及数据异常处理,遵循平台规定,确保合规使用。如需详细了解,可参考官方文档或联系技术支持。
2137 1
技术心得记录:恶意代码功能与应对
技术心得记录:恶意代码功能与应对
134 0
局域网内无法连接时间源?使用Chrony服务搭建时间源
局域网内无法连接时间源?使用Chrony服务搭建时间源
347 6
部署harbor
在Ubuntu 22.04 LTS环境下,部署Harbor私有仓库的步骤包括:确保已安装Docker(版本24.0.6),参考官方v2.5.3安装指南,注意避免在NFS4挂载磁盘上部署以防止PostgreSQL相关问题。首先,生成SSL证书,然后更新Docker配置并重启服务。解压并配置Harbor离线安装包,修改`harbor.yml`,执行`prepare`和`install.sh`脚本,最后将Harbor设置为系统服务。
340 0
SpringBoot出现com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Incorrect datetime va
SpringBoot出现com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Incorrect datetime va
867 0
emqtt 启动报错 Erlang closed the connection 查看状态报错
emqtt 启动报错 Erlang closed the connection 查看状态报错 Node 'emq@192.168.*.*' not responding to pings.
387 0