超過經理收入的員工
employee 表包含所有員工,他們的經理也屬於員工。每個員工都有乙個 id,此外還有一列對應員工的經理的 id。
±—±------±-------±----------+
| id | name | salary | managerid |
±—±------±-------±----------+
| 1 | joe | 70000 | 3 |
| 2 | henry | 80000 | 4 |
| 3 | sam | 60000 | null |
| 4 | max | 90000 | null |
±—±------±-------±----------+
給定 employee 表,編寫乙個 sql 查詢,該查詢可以獲取收入超過他們經理的員工的姓名。在上面的**中,joe 是唯一乙個收入超過他的經理的員工。
±---------+
| employee |
±---------+
| joe |
±---------+
解題思路及步驟:
查詢收入超過他們經理的員工的姓名—觀察employee表,如果把經理的收入與下屬收入放在一行就好比較了,所以用到自聯結。
1.確定了需要用到兩張一樣的表;
2.將兩張表通過笛卡兒積變成乙個表;
select * from employee as a,employee as b
將第乙個表中的每一行與第二個表中的每一行配對,如下:
3.根據兩個表的關係去除不符合邏輯的資料—通過where子句來聯結兩個表
where a.managerid = b.id
剩下 如下兩行資料:
4.通過條件過濾資料—收入大於經理的員工:
and a.salary > b.salary;
最後只保留了joe所在行。
5.根據題中所給的如下格式:
±---------+
| employee |
±---------+
| joe |
±---------+
不需要呈現所有列,則將第一條語句修改如下:
select a.name as employee
最終語句如下:
select a.name as employee
from employee as a,employee as b
where a.managerid = b.id
and a.salary > b.salary;
這是通過自聯結的方法來解決的,還可以通過select子句來解決。 LeetCode 181 超過經理輸入的員工
題目 employee 表包含所有員工,他們的經理也屬於員工。每個員工都有乙個 id,此外還有一列對應員工的經理的 id。id name salary managerid 1 joe 70000 3 2 henry 80000 4 3 sam 60000 null 4 max 90000 null ...
LeetCode181超過經理收入的員工
題目 employee 表包含所有員工,他們的經理也屬於員工。每個員工都有乙個 id,此外還有一列對應員工的經理的 id。id name salary managerid 1 joe 70000 3 2 henry 80000 4 3 sam 60000 null 4 max 90000 null ...
LeetCode 181 超過經理收入的員工
employee 表包含所有員工,他們的經理也屬於員工。每個員工都有乙個 id,此外還有一列對應員工的經理的 id。id name salary managerid 1 joe 70000 3 2 henry 80000 4 3 sam 60000 null 4 max 90000 null 給定 ...