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
留言分享你的想法!
avatar-img
小松鼠的演算法樂園
95會員
427內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
2024/01/01
題目敘述 題目會給我們兩張資料表,第一張是Sales,第二張是Product。 第一張是Sales表格,裡面分別有sale_id、 product_id、year、quantity、price等欄位。其中(sale_id、 product_id)做為複合主鍵Primary key Table:
Thumbnail
2024/01/01
題目敘述 題目會給我們兩張資料表,第一張是Sales,第二張是Product。 第一張是Sales表格,裡面分別有sale_id、 product_id、year、quantity、price等欄位。其中(sale_id、 product_id)做為複合主鍵Primary key Table:
Thumbnail
2023/12/29
題目敘述 題目會給我們兩張資料表。 第一張資料表是Employees 裡面分別有id、name等欄位。這張資料表的id是主鍵。 第二張資料表是EmployeeUNI 裡面分別有id、unique_id等欄位。 題目要求我們列出每位員工對應到的Unique ID
Thumbnail
2023/12/29
題目敘述 題目會給我們兩張資料表。 第一張資料表是Employees 裡面分別有id、name等欄位。這張資料表的id是主鍵。 第二張資料表是EmployeeUNI 裡面分別有id、unique_id等欄位。 題目要求我們列出每位員工對應到的Unique ID
Thumbnail
2023/12/26
題目敘述 題目會給我們一張Tweets資料表。裡面分別有tweet_id、content等欄位。這張資料表的tweet_id是主鍵Primary key。 題目要求我們列出所有非法的推文。輸出順序不拘。 非法推文的定義,推文內容的長度超過15個字元。
Thumbnail
2023/12/26
題目敘述 題目會給我們一張Tweets資料表。裡面分別有tweet_id、content等欄位。這張資料表的tweet_id是主鍵Primary key。 題目要求我們列出所有非法的推文。輸出順序不拘。 非法推文的定義,推文內容的長度超過15個字元。
Thumbnail
看更多
你可能也想看
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
為活動安排適合的工作分組,不僅可以幫助活動流暢,往更遠一點看,能幫助大家提升其專業分工上能力,例如一開始只能當一位接待員,但經驗累積後,主管就可以放手給其承擔各大領導角色。這樣的思維可能顛覆傳統職場上對下關係,但對一個組織長遠發展跟經驗傳承是好的。本文以一場200人研討會規格,試著列出所需人力分組。
Thumbnail
為活動安排適合的工作分組,不僅可以幫助活動流暢,往更遠一點看,能幫助大家提升其專業分工上能力,例如一開始只能當一位接待員,但經驗累積後,主管就可以放手給其承擔各大領導角色。這樣的思維可能顛覆傳統職場上對下關係,但對一個組織長遠發展跟經驗傳承是好的。本文以一場200人研討會規格,試著列出所需人力分組。
Thumbnail
題目敘述 Most Profit Assigning Work 公司裡有n位員工,m件任務。 每位員工的能力記錄在worker陣列。 每個任務對應的能力要求和獲利紀錄在difficulty 和profit陣列。 不同的員工可以做同樣的任務。 請問怎麼分配任務可以得到整體最大獲利?
Thumbnail
題目敘述 Most Profit Assigning Work 公司裡有n位員工,m件任務。 每位員工的能力記錄在worker陣列。 每個任務對應的能力要求和獲利紀錄在difficulty 和profit陣列。 不同的員工可以做同樣的任務。 請問怎麼分配任務可以得到整體最大獲利?
Thumbnail
EP11精華重點:   1.盤點利害關係人,畫出同心圓圖,中心是公司,往外層層是股東、員工、客戶、供應商、銀行、輔導單位等。 2.穩固既有利害關係人關係,考慮每個決策對他們的影響,做好溝通補償。 3.擴展人脈關係鏈,參加活動、講座、使用名片管理軟體、建立資料庫。 4.維繫人脈,發送電子報、
Thumbnail
EP11精華重點:   1.盤點利害關係人,畫出同心圓圖,中心是公司,往外層層是股東、員工、客戶、供應商、銀行、輔導單位等。 2.穩固既有利害關係人關係,考慮每個決策對他們的影響,做好溝通補償。 3.擴展人脈關係鏈,參加活動、講座、使用名片管理軟體、建立資料庫。 4.維繫人脈,發送電子報、
Thumbnail
曾有遇到某公司資深人資說,要能入職他們公司行政職位的基礎是excel會樞紐分析,而且面試時會直接拿電腦給求職者操作! 行政工作很常需要各種數據 ,在會議上回覆老闆的快問快答。 我在學樞紐分析時,最大的卡關在,不知道哪個要放在「欄」,哪個放在「列」!這時候,最會excel的ChatGPT就派上用場囉!
Thumbnail
曾有遇到某公司資深人資說,要能入職他們公司行政職位的基礎是excel會樞紐分析,而且面試時會直接拿電腦給求職者操作! 行政工作很常需要各種數據 ,在會議上回覆老闆的快問快答。 我在學樞紐分析時,最大的卡關在,不知道哪個要放在「欄」,哪個放在「列」!這時候,最會excel的ChatGPT就派上用場囉!
Thumbnail
你接到一個很重要的專案,其中蘊含了許多非你專業可評估的需求。因此,你要從兩位同事中挑一位副手加入專案團隊。你會怎麼做?
Thumbnail
你接到一個很重要的專案,其中蘊含了許多非你專業可評估的需求。因此,你要從兩位同事中挑一位副手加入專案團隊。你會怎麼做?
Thumbnail
「人力盤點」在組織管理中常被提起,本文會說明「人力盤點」的定義、本質與方法,希望透過了解本質再來使用這項管理手法,才能發揮其效用。
Thumbnail
「人力盤點」在組織管理中常被提起,本文會說明「人力盤點」的定義、本質與方法,希望透過了解本質再來使用這項管理手法,才能發揮其效用。
Thumbnail
在部門管理中,文件化將部門職掌呈現出來,是非常、非常、非常關鍵的作業。本文將說明為何要定義與如何定義部門職掌的方式。
Thumbnail
在部門管理中,文件化將部門職掌呈現出來,是非常、非常、非常關鍵的作業。本文將說明為何要定義與如何定義部門職掌的方式。
Thumbnail
題目敘述 題目會給我們一張Employee 資料表。裡面分別有employee_id、department_id 、primary_flag 等欄位。其中(employee_id, department_id) 是這張資料表的複合主鍵Primary key。 要求我們列出每一位員工的主要歸屬
Thumbnail
題目敘述 題目會給我們一張Employee 資料表。裡面分別有employee_id、department_id 、primary_flag 等欄位。其中(employee_id, department_id) 是這張資料表的複合主鍵Primary key。 要求我們列出每一位員工的主要歸屬
Thumbnail
JOIN 連接 : 可以將2個表格連接在一起
Thumbnail
JOIN 連接 : 可以將2個表格連接在一起
Thumbnail
假設資料情境是「每位員工可能屬於多個部門,每個部門可能包含多位員工」,這種多對多的關係。 資料情境: 程式碼: 在Model中使用belongsToMany建立多對多關係,employee_department則為中間關聯表的table name。 列出所有員工,帶上對應的部門資料: 完整程式碼:
Thumbnail
假設資料情境是「每位員工可能屬於多個部門,每個部門可能包含多位員工」,這種多對多的關係。 資料情境: 程式碼: 在Model中使用belongsToMany建立多對多關係,employee_department則為中間關聯表的table name。 列出所有員工,帶上對應的部門資料: 完整程式碼:
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News