+-------------+---------+
| 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.
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.
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.
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
GROUPBY p2.project_id
) t
ON p.project_id = t.project_id AND e.experience_years = t.max_exp;
1
2
3
4
5
6
7
8
9
10
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
GROUPBY p2.project_id
) t
ON p.project_id = t.project_id AND e.experience_years = t.max_exp;
1
2
3
4
5
6
7
# Assume Project and Employee are pandas DataFramesimport pandas as pd
defmost_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