【LeetCode--資料庫】薪水問題
阿新 • • 發佈:2019-02-09
176.第二高的薪水(簡單)
題目:編寫一個 SQL 查詢,獲取 Employee
表中第二高的薪水(Salary)
例如下述 Employee
表,SQL查詢應該返回 200
作為第二高的薪水。如果不存在第二高的薪水,那麼查詢應返回 null
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
期望結果如下:
+---------------------+ | SecondHighestSalary | +---------------------+ | 200 | +---------------------+
解法:選擇出所有不重複的薪水,按照薪水降序排列後,選擇第二條資料,即為第二高的薪水
select (select distinct Salary from Employee
order by Salary DESC
limit 1 offset 1) as SecondHighestSalary;
PS:limit n offset m 表示:從第m條開始,選取n條資料(從0開始排序,所以上面選第二條資料 是 offset 1)
177.第N高的薪水
題目:編寫一個 SQL 查詢,獲取 Employee
表中第 n 高的薪水(Salary)
例如下述 Employee
表,n = 2
200
。如果不存在第 n 高的薪水,那麼查詢應返回 null
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
期望結果如下:
+------------------------+
| getNthHighestSalary(2) |
+------------------------+
| 200 |
+------------------------+
解法:思路與上面第二高薪水相同,降序排列後,使用limit offset 選取第N高的薪水
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
declare m int;
set m = N-1;
RETURN (
select distinct Salary
from Employee
order by Salary DESC
limit 1 offset m
);
END
PS:這一題涉及mysql的自定義函式(user-defined function UDF),可以先了解下再解題
建立自定義函式,簡單來說就是:
create function 函式名(形參列表) returns 返回型別 -- 注意是retruns
begin
函式體 —— 函式內定義的變數,如上面的 set m = N-1;
返回值 ——return部分
end