LeetCode 181 超過經理收入的員工 解題

2021-08-28 16:06:37 字數 1639 閱讀 5565

超過經理收入的員工

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 給定 ...