Welcome to Subscribe On Youtube

1076. Project Employees II

Description

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 all the projects that have the most employees.

Return the result table in any order.

The result format is in the following example.

 

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   | 1                |
| 4           | Doe    | 2                |
+-------------+--------+------------------+
Output: 
+-------------+
| project_id  |
+-------------+
| 1           |
+-------------+
Explanation: The first project has 3 employees while the second one has 2.

Solutions

  • # Write your MySQL query statement below
    
    select project_id 
    from Project 
    group by project_id
    having count(distinct employee_id) = (
        select max(count_employee_id) from (
            select project_id, count(employee_id) as count_employee_id
            from Project
            group by project_id
        ) as max_employee
    );
    
    
    -- same as above, but separated into 2 parts
    WITH max_employee AS (
        SELECT project_id, COUNT(employee_id) AS count_employee_id
        FROM Project
        GROUP BY project_id
    )
    
    SELECT project_id 
    FROM Project 
    GROUP BY project_id
    HAVING COUNT(DISTINCT employee_id) = (
        SELECT MAX(count_employee_id) 
        FROM max_employee
    );
    
    --
    
    SELECT project_id
    FROM Project
    GROUP BY 1
    HAVING
        COUNT(1) >= ALL (
            SELECT COUNT(1)
            FROM Project
            GROUP BY project_id
        );
    
    

All Problems

All Solutions