資料庫刷題之第N高薪水題解

2021-10-01 20:45:10 字數 970 閱讀 6436

編寫乙個 sql 查詢,獲取 employee 表中第n高的薪水(salary) 。

| id | salary |

±—±-------+

| 1 | 100 |

| 2 | 200 |

| 3 | 300 |

解題思路:

如果n<0,表示獲取最低薪資salary

如果n>=1,表示獲取第n高薪水salary.

用limit來解 limit x,y

x表示跳過x條,y表示取y條記錄

而要獲取第n高薪水,則表示為跳過n-1條,取第一條薪資記錄

則表示 limit n-1,1

sql語句:

create function getnthhighestsalary

(n int) returns int

begin

declare p1 int;

-- 第p1高的薪水

declare p2 int;

-- 取p1-

1後的p2個值

-- 當n<

1時,p1會為負數,採用if調整為0,另此時結果不存在,設定p2為0

if (n<1)

then set p1 =

0, p2 =0;

else set p1 = n-

1, p2 =1;

end if;

return (

-- 若不存在第n高的薪水,取null

select ifnull((

-- 去除重複值,倒序取第p1大的值後p2個值

select distinct salary

from employee

order by salary desc

limit p1, p2

), null

) as secondhighestsalary

);end

力扣資料庫 第N高的薪水

編寫乙個 sql 查詢,獲取 employee 表中第 n 高的薪水 salary id salary 1100 2200 3300 例如上述 employee 表,n 2 時,應返回第二高的薪水 200。如果不存在第 n 高的薪水,那麼查詢應返回 null。getnthhighestsalary ...

力扣資料庫 177 第N高的薪水

編寫乙個 sql 查詢,獲取 employee 表中第 n 高的薪水 salary id salary 1 100 2 200 3 300 例如上述 employee 表,n 2 時,應返回第二高的薪水 200。如果不存在第 n 高的薪水,那麼查詢應返回 null。getnthhighestsala...

資料庫刷題

考慮到可能不是每個人都有位址資訊,我們應該使用outer join而不是預設的inner join。注意 如果沒有某個人的位址資訊,使用 where 子句過濾記錄將失敗,因為它不會顯示姓名資訊。2.編寫乙個 sql 查詢,獲取 employee 表中第二高的薪水 salary select max ...