SQL 合併查詢語法 列出部屬的數量和平均年齡 Leetcode #1731

閱讀時間約 5 分鐘

題目敘述

題目會給我們一張Employees 資料表。裡面分別有employee_id、name、reports_to 、age 等欄位。其中employee_id 是這張資料表的主鍵Primary key。


要求我們列出每一位經理人下轄部屬的數量部屬的平均年齡(四捨五入到最接近的整數)。

輸出答案時以 employee_id 員工ID升序排列


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).

詳細的題目可在這裡看到


約束條件

要求我們列出每一位經理人下轄部屬的數量部屬的平均年齡(四捨五入到最接近的整數)。

輸出答案時以 employee_id 員工ID升序排列


演算法- 合併查詢 JOIN

當需要使用到兩張資料表,或者一張資料表使用兩次時,想到 JOIN 合併查詢


本題的情況是一張資料表使用兩次,並且用經理的ID 和 員工向上報告對象的ID去做JOIN 合併查詢,建立出經理對部屬的關係。


這題主要的考點落在合併查詢JOIN,可以使用經典的SQL 合併查詢語法去解開

SELECT ...欄位

FROM ...表格1

JOIN ...表格2 (可能是另一張表格,也可以是同一張表格)

ON ...合併對齊的欄位

GROUP BY ...分群的依據欄位

ORDER BY ...輸出排序的依據


主角是 經理人 和 下轄的部屬,經理人 和 部屬 都是員工表Employees裡面的成員,這題使用INNER JOIN 同一張表使用兩次,做合併查詢。

經理人 對 部屬的關係可以用 經理的員工ID員工的向上回報的ID 串聯起來。

image.png

image.png


SELECT mgr.employee_id, mgr.name, COUNT(emp.employee_id) AS "reports_count", ROUND(AVG(emp.age), 0) as "average_age"
FROM Employees mgr
# Connect two tables on "report_to" field.
INNER JOIN Employees emp
ON mgr.employee_id = emp.reports_to

接著 在對經理人做分群 和 升序排列即可。

GROUP BY mgr.employee_id
# Sort by ID in ascending order
ORDER BY mgr.employee_id ASC;

程式碼 合併查詢 JOIN

# Round employees' age to nearest integer
SELECT mgr.employee_id, mgr.name, COUNT(emp.employee_id) AS "reports_count", ROUND(AVG(emp.age), 0) as "average_age"
FROM Employees mgr
# Connect two tables on "report_to" field.
INNER JOIN Employees emp
ON mgr.employee_id = emp.reports_to
GROUP BY mgr.employee_id
# Sort by ID in ascending order
ORDER BY mgr.employee_id ASC;

關鍵知識點

當需要使用到兩張資料表,或者一張資料表使用兩次時,想到 JOIN 合併查詢

本題的情況是一張資料表使用兩次,並且用經理的ID和員工向上報告對象的ID去做JOIN 合併查詢,建立出經理對部屬的關係。


Reference:

[1] MySQL by INNER JOIN + GROUP BY [w/ SQL Diagram] - The Number of Employees Which Report to Each Employee - LeetCode

52會員
339內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!