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

avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目會給我們兩張資料表。 第一張是Customer資料表,裡面分別有customer_id 、product_key 等欄位。其中product_key 是這張資料表的外鍵foreign key,關連到第二張Product資料表。 題目還特別提醒,這張資料表可能包含重複的data row
題目敘述 題目會給我們一張Courses資料表,裡面分別有student、class等欄位。其中(student, class) 是這張資料表的複合主鍵Primary key pair。 要求我們,以課程做分群,列出至少有五位同學的課程。 輸出的順序不拘。 Table: Courses
題目敘述 題目會給我們兩張資料表,第一張是Sales,第二張是Product。 第一張是Sales表格,裡面分別有sale_id、 product_id、year、quantity、price等欄位。其中(sale_id、 product_id)做為複合主鍵Primary key
題目敘述 題目會給我們一張Activity資料表,裡面分別有user_id、 session_id、activity_date 、activity_type等欄位。 要求我們列出所有過去30天的活躍使用者。 活躍使用者的定義為2019-07-27包含這天,往前三十天的區間內,至少有過一次活動紀錄
題目敘述 題目會給我們一張World資料表,裡面分別有name、 continent、area、population 、gdp等欄位,其中name 是主鍵Primary Key。 要求我們列出所有大型國家,大型國家的定義是 人口大於等於兩千五百萬人 或者 土地面積大於等於三百萬平方公里。 輸出順
題目敘述 題目會給我們一張Cinema資料表,裡面分別有id、movie、description, rating 等欄位,其中id 是主鍵Primary Key。 要求我們列出所有推薦人ID為奇數,而且不無聊的電影,印出時依照電影rating評分從高到低降序排列。 Table: Cinema
題目會給我們兩張資料表。 第一張是Customer資料表,裡面分別有customer_id 、product_key 等欄位。其中product_key 是這張資料表的外鍵foreign key,關連到第二張Product資料表。 題目還特別提醒,這張資料表可能包含重複的data row
題目敘述 題目會給我們一張Courses資料表,裡面分別有student、class等欄位。其中(student, class) 是這張資料表的複合主鍵Primary key pair。 要求我們,以課程做分群,列出至少有五位同學的課程。 輸出的順序不拘。 Table: Courses
題目敘述 題目會給我們兩張資料表,第一張是Sales,第二張是Product。 第一張是Sales表格,裡面分別有sale_id、 product_id、year、quantity、price等欄位。其中(sale_id、 product_id)做為複合主鍵Primary key
題目敘述 題目會給我們一張Activity資料表,裡面分別有user_id、 session_id、activity_date 、activity_type等欄位。 要求我們列出所有過去30天的活躍使用者。 活躍使用者的定義為2019-07-27包含這天,往前三十天的區間內,至少有過一次活動紀錄
題目敘述 題目會給我們一張World資料表,裡面分別有name、 continent、area、population 、gdp等欄位,其中name 是主鍵Primary Key。 要求我們列出所有大型國家,大型國家的定義是 人口大於等於兩千五百萬人 或者 土地面積大於等於三百萬平方公里。 輸出順
題目敘述 題目會給我們一張Cinema資料表,裡面分別有id、movie、description, rating 等欄位,其中id 是主鍵Primary Key。 要求我們列出所有推薦人ID為奇數,而且不無聊的電影,印出時依照電影rating評分從高到低降序排列。 Table: Cinema
你可能也想看
Google News 追蹤
Thumbnail
※ GROUP BY 用於將數據表中的數據按照一個或多個列進行分組。例如在處理一個表格的資料時,可以指定欄位,一個或是多個,然後把將其視為ID進行分組處理。 ※ 語法 SELECT column1, column2, ..., aggregate_function(column) FROM
Thumbnail
※ 關聯式資料庫(RDBMS)是什麼? 關聯式資料庫(RDBMS)是一種傳統的資料庫系統,以結構化查詢語言(SQL)為基礎,將資料儲存於預定義的表格中。這些表格包括行和列,彼此之間存在明確的關聯性。 ※ 關聯式資料庫(RDBMS)有兩個重要元素: 關聯(Relational): 關聯式資料庫
Thumbnail
【特殊圖表教學目錄傳送門 : EXCEL特殊圖表大合輯 | 持續更新中】 這集要分享可以輕鬆看出排名趨勢的視覺化圖表,可以藉由各線條快速掌握每個人或者是項目的平名變化與趨勢 【🎗️範例展示】 原始資料:左側每位人員在各個月份的業績表現 視覺圖表:把左邊人員的業績,以每個月排
Thumbnail
🎗️本次主題成果展示:人力資訊分析 上集回顧 🔗EXCEL儀表板 | 人力資訊分析儀表板 #1 | 上手等級:入門🔗 ♐人力資訊儀表板分集 本次人力資訊儀錶板預計分成5集依循漸進逐步完成 資料整理與人力資訊取得 區域樞紐分析+環圈圖 (本集教學) 性別樞紐分析+圖像
Thumbnail
這次來聊一個比較大的題目,這題可以算是人才招募的前哨站。 #組織現況分析 你知道目前單位內的人力相關組成狀況嗎?從基本的年資,年齡,學歷,工作經驗到進階的目前人生階段,對於短期的職涯規劃發展,這樣大概可以拼湊出一個單位的結構。身為人事的我們,也許有系統可以分析,如果沒有系統也可以自己
如何在SQL實踐中EXCEL 常用功能 篩選 和 擷取文字串?需要熟練地使用分組(GROUP BY) 與 排序 (ORDER BY) 以及SUBSTRING_INDEX函數!
Thumbnail
勞保級距的查找是會計與人資常常會遇到的一個需求,比較小規模的公司通常都是使用EXCEL來管理員工的勞保與健保,這篇要分享如何使用EXCEL函數來快速將員工正確的級距找出來。 勞工保險投保薪資分級表 EXCEL至今版本五花八門,不同的版本可以使用的函數不同,處理的難易度也不太相同,但不用擔心,
Thumbnail
你是人資嗎?有沒有很常聽到主管這樣說「這週的班表可以幫我整理一下嗎?我馬上要,我要了解每個人上班的狀況。」但若是要花費大量時間手動輸入、整理,不僅費時費力,還容易出錯。眼看者時間一分一秒逼近,資料卻還沒統整完,真的會會崩潰到極點。教你一個技巧,讓你在1 分鐘內快速完成員工出勤表統計
Thumbnail
※ 資料庫與 SQL ※ 題目: 請寫出 SQL 讀取 people table 中所有 gender 是 M 而且 age 大於 18 的資料。 ※ 解答: SELECT * FROM people WHERE gender = 'M' AND a
Thumbnail
※ GROUP BY 用於將數據表中的數據按照一個或多個列進行分組。例如在處理一個表格的資料時,可以指定欄位,一個或是多個,然後把將其視為ID進行分組處理。 ※ 語法 SELECT column1, column2, ..., aggregate_function(column) FROM
Thumbnail
※ 關聯式資料庫(RDBMS)是什麼? 關聯式資料庫(RDBMS)是一種傳統的資料庫系統,以結構化查詢語言(SQL)為基礎,將資料儲存於預定義的表格中。這些表格包括行和列,彼此之間存在明確的關聯性。 ※ 關聯式資料庫(RDBMS)有兩個重要元素: 關聯(Relational): 關聯式資料庫
Thumbnail
【特殊圖表教學目錄傳送門 : EXCEL特殊圖表大合輯 | 持續更新中】 這集要分享可以輕鬆看出排名趨勢的視覺化圖表,可以藉由各線條快速掌握每個人或者是項目的平名變化與趨勢 【🎗️範例展示】 原始資料:左側每位人員在各個月份的業績表現 視覺圖表:把左邊人員的業績,以每個月排
Thumbnail
🎗️本次主題成果展示:人力資訊分析 上集回顧 🔗EXCEL儀表板 | 人力資訊分析儀表板 #1 | 上手等級:入門🔗 ♐人力資訊儀表板分集 本次人力資訊儀錶板預計分成5集依循漸進逐步完成 資料整理與人力資訊取得 區域樞紐分析+環圈圖 (本集教學) 性別樞紐分析+圖像
Thumbnail
這次來聊一個比較大的題目,這題可以算是人才招募的前哨站。 #組織現況分析 你知道目前單位內的人力相關組成狀況嗎?從基本的年資,年齡,學歷,工作經驗到進階的目前人生階段,對於短期的職涯規劃發展,這樣大概可以拼湊出一個單位的結構。身為人事的我們,也許有系統可以分析,如果沒有系統也可以自己
如何在SQL實踐中EXCEL 常用功能 篩選 和 擷取文字串?需要熟練地使用分組(GROUP BY) 與 排序 (ORDER BY) 以及SUBSTRING_INDEX函數!
Thumbnail
勞保級距的查找是會計與人資常常會遇到的一個需求,比較小規模的公司通常都是使用EXCEL來管理員工的勞保與健保,這篇要分享如何使用EXCEL函數來快速將員工正確的級距找出來。 勞工保險投保薪資分級表 EXCEL至今版本五花八門,不同的版本可以使用的函數不同,處理的難易度也不太相同,但不用擔心,
Thumbnail
你是人資嗎?有沒有很常聽到主管這樣說「這週的班表可以幫我整理一下嗎?我馬上要,我要了解每個人上班的狀況。」但若是要花費大量時間手動輸入、整理,不僅費時費力,還容易出錯。眼看者時間一分一秒逼近,資料卻還沒統整完,真的會會崩潰到極點。教你一個技巧,讓你在1 分鐘內快速完成員工出勤表統計
Thumbnail
※ 資料庫與 SQL ※ 題目: 請寫出 SQL 讀取 people table 中所有 gender 是 M 而且 age 大於 18 的資料。 ※ 解答: SELECT * FROM people WHERE gender = 'M' AND a