每日動動腦,用美國企業真實的面試考題來練習,每天7題,我會把免費的428題簡單SQL都做完,大概會用到兩個月,有需要的人,也可以直接搜ID。
解題日:2023/8/28
今天的第幾題:7/7
Salesforce, Glassdoor
難易度:簡單
有一張員工資料表,裡面有部門、員工名字、薪水等。請列出每個員工的名字、所屬部門、該名員工的薪水,以及該部門平均薪資,共四個欄位。
/* 解法一 比較複雜,基本上就是把兩張表結合在一起,你可能會問,第二張表在哪裡? 底下有一個只算出部門平均薪資的sub query 這可以當成第二張表 */
SELECT e1.department,
first_name,
salary,
avg_salary_of_dept
FROM employee e1
LEFT JOIN
(SELECT department,
AVG(salary) AS avg_salary_of_dept
FROM employee e1
GROUP BY department) e2
ON e1.department = e2.department;
/* 解法二 比較優雅,前提是要知道怎麼使用 OVER PARTITION BY */
SELECT department,
first_name,
salary,
AVG(salary) OVER (PARTITION BY department)
FROM employee;
有些SQL功能會幫你省下很多行code,而且又好讀。
我第一個想法是用JOIN,沒有先想到OVER PARTITION BY,我很高興我有這個練習,也看了其他人的解法,這樣學起來很有效率。因為大家想法不同,可以明白其他人的思路。