編寫一個 SQL 查詢,獲取 Employee 表中第 n 高的薪水(Salary)。
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
例如上述 Employee 表,n = 2 時,應返回第二高的薪水 200。如果不存在第 n 高的薪水,那么查詢應返回 null。
+------------------------+
| getNthHighestSalary(2) |
+------------------------+
| 200 |
+------------------------+
答案:
# 創建函數getNthHighestSalary,參數N為INT,返回類型為INT
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
# 開始
BEGIN
# Decalre 是定義變量的用法,所以定義M 為INT類型
Declare M INT;
# 如果在select查詢語句中直接寫入N-1 會語法報錯。所以通過創建存儲函數來實現。
#另外由于選取的是第N高的薪水,采取的是逆序排序,取第N個。
# 根據逆序排序的用法,本應該寫入DESC limit n-1,1(現在是DESC limit M,1)
#所以意思是逆序排序從下標n-1的元素開始取1個。當我們輸入2的時候,第2高的薪水,
#就要選擇下標為1的屬性salary,取1個值。
#(limit m,n ,其中m的計數是從0開始,表示第一條)
SET M=N-1
RETURN(
select discintct salary from employee order by Salary desc limit M,1
);
END