力扣2988. 最大部门的经理

一、数据

2988. 最大部门的经理

表: Employees

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| emp_id      | int     |
| emp_name    | varchar |
| dep_id      | int     |
| position    | varchar |
+-------------+---------+
emp_id 是这张表具有唯一值的列。
这张表包括 emp_id, emp_name, dep_id,和 position。

查询 最大部门 的 经理 的 名字。当拥有相同数量的员工时,可能会有多个最大部门。

返回 按照 dep_id 升序 排列的结果表格。

结果表格的格式如下例所示。

示例 1:

输入:
Employees table:
+--------+----------+--------+---------------+
| emp_id | emp_name | dep_id | position      | 
+--------+----------+--------+---------------+
| 156    | Michael  | 107    | Manager       |
| 112    | Lucas    | 107    | Consultant    |    
| 8      | Isabella | 101    | Manager       | 
| 160    | Joseph   | 100    | Manager       | 
| 80     | Aiden    | 100    | Engineer      | 
| 190    | Skylar   | 100    | Freelancer    | 
| 196    | Stella   | 101    | Coordinator   |
| 167    | Audrey   | 100    | Consultant    |
| 97     | Nathan   | 101    | Supervisor    |
| 128    | Ian      | 101    | Administrator |
| 81     | Ethan    | 107    | Administrator |
+--------+----------+--------+---------------+
输出
+--------------+--------+
| manager_name | dep_id | 
+--------------+--------+
| Joseph       | 100    | 
| Isabella     | 101    | 
+--------------+--------+
解释
- 部门 ID 为 100 和 101 的每个部门都有 4 名员工,而部门 107 有 3 名员工。由于部门 100 和 101 都拥有相同数量的员工,它们各自的经理将被包括在内。
输出表格按 dep_id 升序排列。

二、分析

表格中给了每位员工的id、名字、所属部门id和他的职位。

为了解决问题,就需要先找出每个部门的人数,然后按照部门人数进行排序,找出人数最多的部门,最后筛选出在给部门中为Manager的人并返回。

三、代码

with t1 as (
    select
emp_name,dep_id,position,count(1) over(partition by dep_id) cnt -- 找出每个部门的人数
from employees
)
,t2 as (
    select *,dense_rank() over (order by cnt desc) rk -- 按部门人数进行排序
from t1
)
select emp_name manager_name, dep_id
from t2
where rk = 1 and position = 'Manager' -- 筛选出部门人数最多且职位为Manager的人
order by dep_id
;

四、总结

本题的难度较低,需要注意的是当拥有相同数量的员工时,可能会有多个最大部门,需要全部返回,所以在排序的时候需要使用dense_rank()函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值