0
点赞
收藏
分享

微信扫一扫

【LeetCode-SQL】1077. 项目员工 III

Mezereon 2022-03-11 阅读 38

目录

一、题目

项目表 Project:

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| project_id  | int     |
| employee_id | int     |
+-------------+---------+
(project_id, employee_id) 是这个表的主键
employee_id 是员工表 Employee 的外键

员工表 Employee:

+------------------+---------+
| Column Name      | Type    |
+------------------+---------+
| employee_id      | int     |
| name             | varchar |
| experience_years | int     |
+------------------+---------+
employee_id 是这个表的主键

写 一个 SQL 查询语句,报告在每一个项目中经验最丰富的雇员是谁。如果出现经验年数相同的情况,请报告所有具有最大经验年数的员工。

查询结果格式在以下示例中:

Project 表:
+-------------+-------------+
| project_id  | employee_id |
+-------------+-------------+
| 1           | 1           |
| 1           | 2           |
| 1           | 3           |
| 2           | 1           |
| 2           | 4           |
+-------------+-------------+

Employee 表:
+-------------+--------+------------------+
| employee_id | name   | experience_years |
+-------------+--------+------------------+
| 1           | Khaled | 3                |
| 2           | Ali    | 2                |
| 3           | John   | 3                |
| 4           | Doe    | 2                |
+-------------+--------+------------------+

Result 表:
+-------------+---------------+
| project_id  | employee_id   |
+-------------+---------------+
| 1           | 1             |
| 1           | 3             |
| 2           | 1             |
+-------------+---------------+
employee_id 为 13 的员工在 project_id 为 1 的项目中拥有最丰富的经验。在 project_id 为 2 的项目中,employee_id 为 1 的员工拥有最丰富的经验。

二、解决

1、窗口函数

思路:

Step 1:先使用窗口函数获取每个project_id下experience_years的排序;
Step 2:找到排序第一名(或并列)的employee id。

代码:

select 
    t3.project_id
    , t3.employee_id
from
    (
        select 
            t1.project_id
            , t1.employee_id
            , rank() over (partition by t1.project_id order by t2.experience_years desc) rn
        from Project t1
        inner join Employee t2 on t1.employee_id = t2.employee_id
    ) t3
where t3.rn = 1;

三、参考

1、窗口函数方法

举报

相关推荐

0 条评论