Hard
Table: Employees
+----------------+---------+
| Column Name | Type |
+----------------+---------+
| employee_id | int |
| employee_name | varchar |
| manager_id | int |
| salary | int |
| department | varchar |
+----------------+---------+
employee_id is the unique key for this table.
Each row contains information about an employee, including their ID, name, their manager's ID, salary, and department.
manager_id is null for the top-level manager (CEO).
Write a solution to analyze the organizational hierarchy and answer the following:
1
, employees reporting directly to the CEO are level 2
, and so on).Return the result table ordered by _the result ordered by level in ascending order, then by budget in descending order, and finally by employee_name in ascending order._
The result format is in the following example.
Example:
Input:
Employees table:
+-------------+---------------+------------+--------+-------------+
| employee_id | employee_name | manager_id | salary | department |
+-------------+---------------+------------+--------+-------------+
| 1 | Alice | null | 12000 | Executive |
| 2 | Bob | 1 | 10000 | Sales |
| 3 | Charlie | 1 | 10000 | Engineering |
| 4 | David | 2 | 7500 | Sales |
| 5 | Eva | 2 | 7500 | Sales |
| 6 | Frank | 3 | 9000 | Engineering |
| 7 | Grace | 3 | 8500 | Engineering |
| 8 | Hank | 4 | 6000 | Sales |
| 9 | Ivy | 6 | 7000 | Engineering |
| 10 | Judy | 6 | 7000 | Engineering |
+-------------+---------------+------------+--------+-------------+
Output:
+-------------+---------------+-------+-----------+--------+
| employee_id | employee_name | level | team_size | budget |
+-------------+---------------+-------+-----------+--------+
| 1 | Alice | 1 | 9 | 84500 |
| 3 | Charlie | 2 | 4 | 41500 |
| 2 | Bob | 2 | 3 | 31000 |
| 6 | Frank | 3 | 2 | 23000 |
| 4 | David | 3 | 1 | 13500 |
| 7 | Grace | 3 | 0 | 8500 |
| 5 | Eva | 3 | 0 | 7500 |
| 9 | Ivy | 4 | 0 | 7000 |
| 10 | Judy | 4 | 0 | 7000 |
| 8 | Hank | 4 | 0 | 6000 |
+-------------+---------------+-------+-----------+--------+
Explanation:
Note:
# Write your MySQL query statement below
WITH RECURSIVE org_hierarchy (
orig_employee_id,
orig_employee_name,
employee_id,
employee_name,
manager_id,
salary,
org_level
) AS (
SELECT
employee_id AS orig_employee_id,
employee_name AS orig_employee_name,
employee_id,
employee_name,
manager_id,
salary,
1 AS org_level
FROM Employees
UNION ALL
SELECT
P.orig_employee_id,
P.orig_employee_name,
CH.employee_id,
CH.employee_name,
CH.manager_id,
CH.salary,
P.org_level + 1
FROM org_hierarchy P
JOIN Employees CH ON CH.manager_id = P.employee_id
),
CEO_hierarchy (
sub_employee_id,
employee_name,
sub_level
) AS (
SELECT
oh.employee_id AS sub_employee_id,
oh.employee_name,
oh.org_level AS sub_level
FROM org_hierarchy oh
JOIN Employees e ON oh.orig_employee_id = e.employee_id
WHERE e.manager_id IS NULL
)
SELECT
oh.orig_employee_id AS employee_id,
oh.orig_employee_name AS employee_name,
ch.sub_level AS level,
COUNT(*) - 1 AS team_size,
SUM(oh.salary) AS budget
FROM org_hierarchy oh
JOIN CEO_hierarchy ch ON oh.orig_employee_id = ch.sub_employee_id
GROUP BY
oh.orig_employee_id,
oh.orig_employee_name,
ch.sub_level
ORDER BY
level ASC, budget DESC, employee_name ASC;