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