【Leetcode】高频SQL基础题--1731.每位经理的下属员工数量

【Leetcode】高频SQL基础题--1731.每位经理的下属员工数量

复制代码
要求:对于此问题,我们将至少有一个其他员工需要向他汇报的员工,视为一个经理。
编写一个解决方案来返回需要听取汇报的所有经理的 ID、名称、直接向该经理汇报的员工人数,以及这些员工的平均年龄,其中该平均年龄需要四舍五入到最接近的整数。
返回的结果集需要按照 employee_id 进行排序。

解题思路:

1、使用了内连接,将Employees表连接自身,通过employee_id和reports_to匹配,然后分组统计。

2、对于识别出的每一位经理 (E1),我们需要对他所有的下属 (E2) 进行聚合计算。

• COUNT(E2.employee_id):统计该经理名下有多少条汇报记录,即下属人数 (reports_count)。

• AVG(E2.age):计算这些下属年龄的平均值。

• ROUND(..., 0):将平均年龄四舍五入到整数。

3、分组和排序​​:

• GROUP BY E1.employee_id:确保所有的统计计算都是按每个经理单独进行的。

• ORDER BY E1.employee_id:按要求以 employee_id顺序返回结果。

代码:

sql 复制代码
SELECT
    E1.employee_id,
    E1.name,
    COUNT(E2.employee_id)AS reports_count,
    ROUND(AVG(E2.age),0)AS average_age
FROM
    Employees E1
JOIN
    Employees E2
ON E1.employee_id = E2.reports_to
GROUP BY E1.employee_id
ORDER BY E1.employee_id

重点:

1、一开始我选择用左连接,通过employee_id和reports_to匹配,然后但是左连接会保留左表的所有记录,即所有经理,即使用户的代码中可能没有下属的员工也会被包括进来。

结果:

我想过加判断:使用 LEFT JOIN来匹配员工和他们的下属,然后通过过滤条件(reports_count = 0, average_age IS NULL)来移除那些不是经理的员工。

但是代码没有用内连接的简洁,性能也没有内连接高效。

代码:

sql 复制代码
SELECT
    E1.employee_id,
    E1.name,
    COUNT(E2.employee_id) AS reports_count,
    ROUND(AVG(E2.age), 0) AS average_age
FROM
    Employees E1
LEFT JOIN
    Employees E2 ON E1.employee_id = E2.reports_to
GROUP BY
    E1.employee_id, E1.name
HAVING
    COUNT(E2.employee_id) > 0 AND AVG(E2.age) IS NOT NULL
ORDER BY
    E1.employee_id;
相关推荐
BD_Marathon12 小时前
SQL学习指南——视图
数据库·sql
2601_9620725512 小时前
李梦娇常识4600问|题库|打印版
sql·华为od·华为·c#·华为云·.net·harmonyos
想吃火锅100513 小时前
【leetcode】121.买卖股票的最佳时机js/c++
算法·leetcode·职场和发展
HackTwoHub14 小时前
Sqli-Scanner SQL注入SKILL自动化挖掘SQL注入,零依赖自动化SQL注入挖掘,赏金猎人
数据库·人工智能·sql·web安全·网络安全·自动化·系统安全
Volunteer Technology15 小时前
Flink Table API与SQL(一)
大数据·sql·flink
凌波粒15 小时前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
持敬chijing16 小时前
Web渗透之SQL注入-常用sql语句
sql·安全·web安全·网络安全
退休倒计时16 小时前
【每日一题】LeetCode 146. LRU 缓存 TypeScript
算法·leetcode·缓存·typescript
Theo·Chan16 小时前
更换 Kingbase V9 License 踩坑记
sql·信创·kingbase
小欣加油17 小时前
leetcode3612 用特殊操作处理字符串I
数据结构·c++·算法·leetcode·职场和发展