基本資料#
難易度: easy 第一次嘗試:2021-10-09
- 提交紀錄:Runtime Error → Wrong Answer ×2 → Accepted → Wrong Answer → Accepted
解題思路#
同一張表要扮演「員工」和「主管」兩個角色,所以 self join(SQL 模板三):e.managerId = m.id 把每個員工接到他的主管,再用 e.salary > m.salary 過濾。輸出欄位要命名成 Employee。沒有主管的人 managerId 是 NULL,join 不到,自然不會出現。
我的嘗試#
這題提交了 6 次:
- 第一版
SELECT Name沒寫是哪一個別名的欄位,兩個別名都有Name,有歧義(RE)。 - 改成
A.Name之後,輸出的欄位名稱不是Employee;中間有一版改成SELECT *想看資料。最後寫成a.Name AS 'Employee'才 AC。
正確解法#
SELECT e.name AS Employee
FROM Employee e
JOIN Employee m ON e.managerId = m.id
WHERE e.salary > m.salary;
複雜度#
self join,有索引時接近 O(n)。
要特別避免的錯誤#
- 兩個別名都要寫清楚欄位屬於哪一個,
Name單獨寫會有歧義。 - 輸出的欄位名稱要是
Employee。 - SQL 的別名在 MySQL 預設不分大小寫,但最好保持一致。
面試口說整理#
同一張表要當員工和主管兩個角色,所以我用 self join,用員工的 managerId 接到主管的 id,再留下薪水比主管高的員工,欄位命名成 Employee。
