編寫乙個 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 ...