Project Employees III
MediumUpdated: Aug 2, 2025
Practice on:
Problem
Table: Project
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| project_id | 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: Employee
+------------------+---------+
| 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.
Return the result table in any order.
The result format is in the following example.
Examples
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.
Solution
Method 1 – Join and Filter by Max Experience
Intuition
We need to find, for each project, the employee(s) with the highest experience. This is a classic group-by-max problem, solved by joining the tables and filtering for the maximum experience per project.
Approach
- Join
ProjectandEmployeeonemployee_id. - For each
project_id, find the maximumexperience_years. - Select employees whose
experience_yearsequals the maximum for their project.
Code
MySQL
SELECT p.project_id, p.employee_id
FROM Project p
JOIN Employee e ON p.employee_id = e.employee_id
JOIN (
SELECT p2.project_id, MAX(e2.experience_years) AS max_exp
FROM Project p2
JOIN Employee e2 ON p2.employee_id = e2.employee_id
GROUP BY p2.project_id
) t
ON p.project_id = t.project_id AND e.experience_years = t.max_exp;
PostgreSQL
SELECT p.project_id, p.employee_id
FROM Project p
JOIN Employee e ON p.employee_id = e.employee_id
JOIN (
SELECT p2.project_id, MAX(e2.experience_years) AS max_exp
FROM Project p2
JOIN Employee e2 ON p2.employee_id = e2.employee_id
GROUP BY p2.project_id
) t
ON p.project_id = t.project_id AND e.experience_years = t.max_exp;
Python (pandas)
# Assume Project and Employee are pandas DataFrames
import pandas as pd
def most_experienced_employees(Project: pd.DataFrame, Employee: pd.DataFrame) -> pd.DataFrame:
merged = Project.merge(Employee, on='employee_id')
max_exp = merged.groupby('project_id')['experience_years'].transform('max')
result = merged[merged['experience_years'] == max_exp][['project_id', 'employee_id']]
return result
Complexity
- ⏰ Time complexity:
O(N)where N is the number of rows in Project. - 🧺 Space complexity:
O(N)for the join and grouping.