Leetcode Upload
Leetcode Upload
266
Add to List
Share
SQL Schema
Table: Project
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| | int |
| employee_id | int |
+-------------+---------+
(project_id, employee_id) is the primary key (combination of columns with
unique values) of this table.
employee_id is a foreign key (reference column) to Employee table.
Each row of this table indicates that the employee with employee_id is working
on the project with project_id.
Table: Employee1077
+------------------+---------+
| Column Name | Type |
+------------------+---------+
| employee_id | int |
| name | varchar |
| experience_years | int |
+------------------+---------+
employee_id is the primary key (column with unique values) of this table.
Each row of this table contains information about one employee.
Write a solution to report the most experienced employees in each project. In
case of a tie, report all employees with the maximum number of experience
years.
Example 1:
Input:
Project table:
+-------------+-------------+
| project_id | employee_id |
+-------------+-------------+
|1 |1 |
|1 |2 |
|1 |3 |
|2 |1 |
|2 |4 |
+-------------+-------------+
Employee table:
+-------------+--------+------------------+
| employee_id | name | experience_years |
+-------------+--------+------------------+
|1 | Khaled | 3 |
|2 | Ali | 2 |
|3 | John | 3 |
|4 | Doe | 2 |
+-------------+--------+------------------+
Output:
+-------------+---------------+
| project_id | employee_id |
+-------------+---------------+
|1 |1 |
|1 |3 |
|2 |1 |
+-------------+---------------+
Explanation: Both employees with id 1 and 3 have the most experience among
the employees of the first project. For the second project, the employee with id 1
has the most experience.
Accepted
55,749
Submissions
72,892
*/
WITH
ProjectMaxExp
AS
(
SELECT
project_id ,
MAX(experience_years) AS MAXExp
FROM
Project P
INNER JOIN
Employee1077 E
ON
E.employee_id = P.employee_id
GROUP BY
P.project_id
)
SELECT
P.project_id,
E.employee_id
FROM
ProjectMaxExp P
INNER JOIN
Project
ON
Project.project_id =P.project_id
INNER JOIN
Employee1077 E
ON
E.employee_id = Project.employee_id
AND E.experience_years = P.MAXExp
SELECT p.project_id,
p.employee_id,
RANK() OVER (PARTITION BY project_id ORDER BY experience_years
DESC) AS rnk
FROM Project p
JOIN Employee1077 e
ON p.employee_id = e.employee_id