建站寶盒做的網(wǎng)站十大免費(fèi)excel網(wǎng)站
前言
練習(xí)sql語(yǔ)句,所有題目來(lái)自于力扣(https://leetcode.cn/problemset/database/)的免費(fèi)數(shù)據(jù)庫(kù)練習(xí)題。
今日題目:
184.部門(mén)工資最高的員工
表:Employee
列名 | 類(lèi)型 |
---|---|
id | int |
name | varchar |
salary | varchar |
departmentId | int |
在 SQL 中,id是此表的主鍵。
departmentId 是 Department 表中 id 的外鍵(在 Pandas 中稱(chēng)為 join key)。
此表的每一行都表示員工的 id、姓名和工資。它還包含他們所在部門(mén)的 id。
表:Department
列名 | 類(lèi)型 |
---|---|
id | int |
name | int |
在 SQL 中,id 是此表的主鍵列。
此表的每一行都表示一個(gè)部門(mén)的 id 及其名稱(chēng)。
查找出每個(gè)部門(mén)中薪資最高的員工。
我那不值一提的想法:
- 首先梳理表內(nèi)容,題干一共給了兩張表,一張員工表,一張部門(mén)表,其中員工表記錄了員工id,姓名,薪資以及部門(mén)id,其中部門(mén)表記錄了部門(mén)id,部門(mén)姓名
- 其次分析需求,需要找到每個(gè)部門(mén)中薪資最高的員工
- 其實(shí)找到每個(gè)部門(mén)的最高工資并不難,難的是如果最高工資有兩個(gè),需要顯示兩個(gè)人的工資,但是max()函數(shù)只能顯示一個(gè)值
- 所以在這里我們首先需要通過(guò)max()+groupby()函數(shù)找到每個(gè)部門(mén)所對(duì)應(yīng)的最高工資
- 然后再將這個(gè)結(jié)果作為臨時(shí)表,去連接題干中的Employee表,條件是:
臨時(shí)表.id = Employee.department_id and 臨時(shí)表.max_salary = Employee.salary
,這樣就能得到最終結(jié)果
select a.name as Department,e.name as Employee,e.salary
from Employee e right join
(select d.id,d.name,max(e.salary) as max_salaryfrom Employee e left join Department d on e.departmentId = d.id group by d.id
) as a
on e.salary = a.max_salary and e.departmentId = a.id
結(jié)果:
總結(jié):
能運(yùn)行就行。