当前位置: 首页 > news >正文

Leetcode 3482. 分析组织层级

1.题目基本信息

1.1.题目描述

表:Employees

+----------------+---------+

| Column Name | Type |

+----------------+---------+

| employee_id | int |

| employee_name | varchar |

| manager_id | int |

| salary | int |

| department | varchar |

+----------------+----------+

employee_id 是这张表的唯一主键。

每一行包含关于一名员工的信息,包括他们的 ID,姓名,他们经理的 ID,薪水和部门。

顶级经理(CEO)的 manager_id 是空的。

编写一个解决方案来分析组织层级并回答下列问题:

层级:对于每名员工,确定他们在组织中的层级(CEO 层级为 1,CEO 的直接下属员工层级为 2,以此类推)。

团队大小:对于每个是经理的员工,计算他们手下的(直接或间接下属)总员工数。

薪资预算:对于每个经理,计算他们控制的总薪资预算(所有手下员工的工资总和,包括间接下属,加上自己的工资)。

返回结果表以 层级 升序 排序,然后以预算 降序 排序,最后以 employee_name 升序 排序。

1.2.题目地址

https://leetcode.cn/problems/analyze-organization-hierarchy/description/

2.解题方法

2.1.解题思路

递归+分组聚合

2.2.解题步骤

第一步,递归获取各个员工的层级

第二步,基于T1,递归查询各个员工的所属关系记录(子树查询)

第三步,基于T2根据group_id进行分组聚合,计算团队大小(注意减去老大本身的一个)、团队预算薪资

3.解题代码

sql代码

# Write your MySQL query statement belowWITH RECURSIVE T1 AS (# 第一步,递归获取各个员工的层级SELECT employee_id, employee_name, manager_id, salary, department, 1 AS levelFROM EmployeesWHERE manager_id IS NULLUNION ALL# 下一层的递归记录SELECT e.employee_id, e.employee_name, e.manager_id, e.salary, e.department, level + 1 AS levelFROM Employees AS e JOIN T1 ON e.manager_id = T1.employee_id
), T2 AS (# 第二步,基于T1,递归查询各个员工的所属关系记录(子树查询)SELECT employee_id, employee_name, salary, level, employee_id AS group_idFROM T1 UNION ALL SELECT T1.employee_id, T2.employee_name, T1.salary, T2.level, T2.group_idFROM T1 JOIN T2 ON T1.manager_id = T2.employee_id
)# 第三步,基于T2根据group_id进行分组聚合,计算团队大小(注意减去老大本身的一个)、团队预算薪资
SELECT group_id AS employee_id, employee_name, level, COUNT(1) - 1 AS team_size, SUM(salary) AS budget
FROM T2 
GROUP BY group_id
ORDER BY level, budget DESC, employee_name

4.执行结果

相关文章:

  • 状态模式 - Flutter中的状态变身术,让对象随“状态“自由切换行为!
  • 对于“随机种子”的作用的理解
  • 71. 简化路径 —day94
  • 【网络】:DNS协议、ICMP协议、NAT技术
  • Cursor1.1.6安装c++插件
  • .netcore 一个mvc到静态html实现
  • 【数据分析】Python+Tushare实现均线金叉死叉交易策略回测
  • 黑马JVM解析笔记(六):深入理解JVM类加载机制与运行时优化
  • 【JS-6.2-模板字符串】ES6 模板字符串:现代JavaScript的字符串处理利器
  • 可达性分析算法Test
  • 如何将Excel表的内容转化为json格式呢?
  • 深入理解Mysql索引底层数据结构和算法
  • InnoDB的redo日志涉及文件及结构
  • 嵌入式硬件中电容的基本原理与详解
  • WPF学习笔记(13)列表框控件ListBox与数据模板
  • Spring Boot项目开发实战销售管理系统——数据库设计!
  • 大模型在恶性心律失常预测及治疗方案制定中的应用研究
  • 计算机网络基础知识详解
  • 筑牢网络安全屏障
  • RabbitMQ 集群与高可用配置