1731. The Number of Employees Which Report to Each Employee


Posted by ikl258794613 on 2024-02-26

Table: Employees

Column Name Type
employee_id int
name varchar
reports_to int
age int

employee_id is the column with unique values for this table.
This table contains information about the employees and the id of the manager they report to. Some employees do not report to anyone (reports_to is null).

For this problem, we will consider a manager an employee who has at least 1 other employee reporting to them.

Write a solution to report the ids and the names of all managers, the number of employees who report directly to them, and the average age of the reports rounded to the nearest integer.

Return the result table ordered by employee_id.

The result format is in the following example.

Example 1:

Input:
Employees table:

employee_id name reports_to age
9 Hercy null 43
6 Alice 9 41
4 Bob 9 36
2 Winston null 37

Output:

employee_id name reports_count average_age
9 Hercy 2 39

Explanation: Hercy has 2 people report directly to him, Alice and Bob. Their average age is (41+36)/2 = 38.5, which is 39 after rounding it to the nearest integer.

解法:
先下

SELECT
*
FROM
    Employees e
    JOIN Employees m ON e.reports_to = m.employee_id
employee_id name reports_to age employee_id name reports_to age
4 Bob 9 36 9 Hercy null 43
6 Alice 9 41 9 Hercy null 43

這樣就能拿到回報的上司。

最後把題目的條件加上去


SELECT
    m.employee_id,
    m.name,
    count(*) AS reports_count,
    round(avg(e.age)) AS average_age
FROM
    Employees e
    JOIN Employees m ON e.reports_to = m.employee_id
GROUP BY
    m.employee_id,
    m.name
ORDER BY
    m.employee_id;

#SQL







Related Posts

MTR04_0614

MTR04_0614

從 Flux 與 MVC 的差異來簡介 Flux

從 Flux 與 MVC 的差異來簡介 Flux

GraphQL(2) - GraphQL & Apollo client

GraphQL(2) - GraphQL & Apollo client


Comments