SQL 聯集語法 每一位員工的主要歸屬部門 Leetcode #1789

閱讀時間約 5 分鐘


題目敘述

題目會給我們一張Employee 資料表。裡面分別有employee_id、department_id 、primary_flag 等欄位。其中(employee_id, department_id) 是這張資料表的複合主鍵Primary key。


要求我們列出每一位員工的主要歸屬部門ID

主要歸屬部門ID定義:

當一位員工只有一個department_id時,那個部門就是主要歸屬部門。

當一位員工擁有多個department_id時,primary_flag標記為"Y"的那個部門就是主要歸屬部門。

輸出答案時,順序不拘


Table: Employee

+---------------+---------+
| Column Name | Type |
+---------------+---------+
| employee_id | int |
| department_id | int |
| primary_flag | varchar |
+---------------+---------+
(employee_id, department_id) is the primary key (combination of columns with unique values) for this table.
employee_id is the id of the employee.
department_id is the id of the department to which the employee belongs.
primary_flag is an ENUM (category) of type ('Y', 'N'). If the flag is 'Y', the department is the primary department for the employee. If the flag is 'N', the department is not the primary.

詳細的題目可在這裡看到


約束條件

主要歸屬部門ID定義:

  1. 當一位員工擁有多個department_id時,primary_flag標記為"Y"的那個部門就是主要歸屬部門。
  2. 當一位員工只有一個department_id時,那個部門就是主要歸屬部門。

輸出答案時,順序不拘


演算法- 聯集UNION操作

這題的考點主要在於把題目中的主要部門的OR運算,轉成等價的SQL查詢語法 UNION

如果還不熟SQL聯及操作的讀者,請參考UNION 語法的教學。


條件1. 當一位員工只有一個department_id時,那個部門就是主要歸屬部門。

條件2. 當一位員工擁有多個department_id時,primary_flag標記為"Y"的那個部門就是主要歸屬部門。


思考與解題邏輯如下:

當滿足條件1 條件2,則該部門為主要歸屬部門。

<=> 當滿足條件1 OR 條件2,則該部門為主要歸屬部門。

<=> 滿足條件1的SQL查詢結果 聯集 滿足條件2的SQL查詢結果。

<=> 滿足條件1的SQL查詢結果 UNION 滿足條件2的SQL查詢結果。

<=>

#滿足條件1的SQL查詢結果

SELECT employee_id, department_id
FROM Employee
WHERE primary_flag = "Y"

#聯集
UNION

#滿足條件2的SQL查詢結果
SELECT employee_id, department_id
FROM Employee
GROUP BY employee_id
HAVING COUNT(department_id) = 1;



程式碼- 聯集UNION操作

# For employee who has multiple department labels
SELECT employee_id, department_id
FROM Employee
WHERE primary_flag = "Y"
UNION
# For employee who has only one department label
SELECT employee_id, department_id
FROM Employee
GROUP BY employee_id
HAVING COUNT(department_id) = 1;

關鍵知識點

當原本的要求 滿足條件1 OR 滿足條件2 很難在一次SQL內寫完時,可以先拆解,再取對應等價的邏輯操作。

因為這題是 OR,對應到的SQL查詢結果合併的語法就是UNION取聯集


Reference:

[1] MySQL with ...table 1 UNION ...table 2 [w/ Comment] - Primary Department for Each Employee - LeetCode

avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目敘述 題目會給我們一張Employees 資料表。裡面分別有employee_id、name、reports_to 、age 等欄位。其中employee_id 是這張資料表的主鍵Primary key。 要求我們列出每一位經理人下轄部屬的數量和部屬的平均年齡(四捨五入到最接近的整數)。
題目會給我們兩張資料表。 第一張是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。 要求我們列出所有大型國家,大型國家的定義是 人口大於等於兩千五百萬人 或者 土地面積大於等於三百萬平方公里。 輸出順
題目敘述 題目會給我們一張Employees 資料表。裡面分別有employee_id、name、reports_to 、age 等欄位。其中employee_id 是這張資料表的主鍵Primary key。 要求我們列出每一位經理人下轄部屬的數量和部屬的平均年齡(四捨五入到最接近的整數)。
題目會給我們兩張資料表。 第一張是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。 要求我們列出所有大型國家,大型國家的定義是 人口大於等於兩千五百萬人 或者 土地面積大於等於三百萬平方公里。 輸出順
你可能也想看
Google News 追蹤
Thumbnail
※ 何時該使用 JOIN? JOIN 使用的時機是:當你需要同時查詢一張以上的資料表的時候。 ※ SQL有哪些TABLE JOIN的方式? INNER JOIN LEFT JOIN RIGHT JOIN SELF JOIN ※ 使用 JOIN 的時候,我們需要考慮到: 我要使用哪一種
Thumbnail
※ 別名: 目的在於提高SQL查詢的可讀性和簡潔性。 ※ 別名有兩種: Column Alias(列別名):在查詢結果中的某一列,取一個臨時的新名字。 Table Alias(表別名):給查詢中的表取一個短暫的新名字。 ※ Column Alias ※ 為什麼需要 Column A
Thumbnail
※ GROUP BY 用於將數據表中的數據按照一個或多個列進行分組。例如在處理一個表格的資料時,可以指定欄位,一個或是多個,然後把將其視為ID進行分組處理。 ※ 語法 SELECT column1, column2, ..., aggregate_function(column) FROM
Thumbnail
※ 關聯式資料庫(RDBMS)是什麼? 關聯式資料庫(RDBMS)是一種傳統的資料庫系統,以結構化查詢語言(SQL)為基礎,將資料儲存於預定義的表格中。這些表格包括行和列,彼此之間存在明確的關聯性。 ※ 關聯式資料庫(RDBMS)有兩個重要元素: 關聯(Relational): 關聯式資料庫
Thumbnail
🎗️本次主題成果展示:人力資訊分析 上集回顧 🔗EXCEL儀表板 | 人力資訊分析儀表板 #1 | 上手等級:入門🔗 ♐人力資訊儀表板分集 本次人力資訊儀錶板預計分成5集依循漸進逐步完成 資料整理與人力資訊取得 區域樞紐分析+環圈圖 (本集教學) 性別樞紐分析+圖像
如何在SQL實踐中EXCEL 常用功能 篩選 和 擷取文字串?需要熟練地使用分組(GROUP BY) 與 排序 (ORDER BY) 以及SUBSTRING_INDEX函數!
Thumbnail
曾有遇到某公司資深人資說,要能入職他們公司行政職位的基礎是excel會樞紐分析,而且面試時會直接拿電腦給求職者操作! 行政工作很常需要各種數據 ,在會議上回覆老闆的快問快答。 我在學樞紐分析時,最大的卡關在,不知道哪個要放在「欄」,哪個放在「列」!這時候,最會excel的ChatGPT就派上用場囉!
Thumbnail
本文將介紹 SQL 中的連接(JOIN),連接(JOIN)是用於結合來自兩個或多個資料表的相關數據,建議讀過我之前發佈的幾篇"SQL學習筆記"之後再來看這篇。
Thumbnail
你接到一個很重要的專案,其中蘊含了許多非你專業可評估的需求。因此,你要從兩位同事中挑一位副手加入專案團隊。你會怎麼做?
Thumbnail
※ 何時該使用 JOIN? JOIN 使用的時機是:當你需要同時查詢一張以上的資料表的時候。 ※ SQL有哪些TABLE JOIN的方式? INNER JOIN LEFT JOIN RIGHT JOIN SELF JOIN ※ 使用 JOIN 的時候,我們需要考慮到: 我要使用哪一種
Thumbnail
※ 別名: 目的在於提高SQL查詢的可讀性和簡潔性。 ※ 別名有兩種: Column Alias(列別名):在查詢結果中的某一列,取一個臨時的新名字。 Table Alias(表別名):給查詢中的表取一個短暫的新名字。 ※ Column Alias ※ 為什麼需要 Column A
Thumbnail
※ GROUP BY 用於將數據表中的數據按照一個或多個列進行分組。例如在處理一個表格的資料時,可以指定欄位,一個或是多個,然後把將其視為ID進行分組處理。 ※ 語法 SELECT column1, column2, ..., aggregate_function(column) FROM
Thumbnail
※ 關聯式資料庫(RDBMS)是什麼? 關聯式資料庫(RDBMS)是一種傳統的資料庫系統,以結構化查詢語言(SQL)為基礎,將資料儲存於預定義的表格中。這些表格包括行和列,彼此之間存在明確的關聯性。 ※ 關聯式資料庫(RDBMS)有兩個重要元素: 關聯(Relational): 關聯式資料庫
Thumbnail
🎗️本次主題成果展示:人力資訊分析 上集回顧 🔗EXCEL儀表板 | 人力資訊分析儀表板 #1 | 上手等級:入門🔗 ♐人力資訊儀表板分集 本次人力資訊儀錶板預計分成5集依循漸進逐步完成 資料整理與人力資訊取得 區域樞紐分析+環圈圖 (本集教學) 性別樞紐分析+圖像
如何在SQL實踐中EXCEL 常用功能 篩選 和 擷取文字串?需要熟練地使用分組(GROUP BY) 與 排序 (ORDER BY) 以及SUBSTRING_INDEX函數!
Thumbnail
曾有遇到某公司資深人資說,要能入職他們公司行政職位的基礎是excel會樞紐分析,而且面試時會直接拿電腦給求職者操作! 行政工作很常需要各種數據 ,在會議上回覆老闆的快問快答。 我在學樞紐分析時,最大的卡關在,不知道哪個要放在「欄」,哪個放在「列」!這時候,最會excel的ChatGPT就派上用場囉!
Thumbnail
本文將介紹 SQL 中的連接(JOIN),連接(JOIN)是用於結合來自兩個或多個資料表的相關數據,建議讀過我之前發佈的幾篇"SQL學習筆記"之後再來看這篇。
Thumbnail
你接到一個很重要的專案,其中蘊含了許多非你專業可評估的需求。因此,你要從兩位同事中挑一位副手加入專案團隊。你會怎麼做?