一、題目名稱sql
Nth Highest Salary(第N高的工資)數據庫
二、題目地址函數
https://leetcode.com/problems/nth-highest-salary/.net
三、題目內容命令行
與這道題目相比,上一道題目「Second Highest Salary」是本題在N=2時的特例。兩道題目的表結構徹底同樣,Employee表的結構以下:code
+----+--------+ | Id | Salary | +----+--------+ | 1 | 100 | | 2 | 200 | | 3 | 300 | +----+--------+
四、初始化數據庫腳本blog
在MySQL數據庫中創建一個名爲LEETCODE的數據庫,用MySQL命令行中的source命令執行下面腳本:排序
-- 執行腳本前必須創建名爲LEETCODE的DATABASE USE LEETCODE; DROP TABLE IF EXISTS Employee; CREATE TABLE Employee ( Id INT NOT NULL PRIMARY KEY, Salary INT ); INSERT INTO Employee (Id, Salary) VALUES (1, 100); INSERT INTO Employee (Id, Salary) VALUES (2, 200); INSERT INTO Employee (Id, Salary) VALUES (3, 200); INSERT INTO Employee (Id, Salary) VALUES (4, 300); INSERT INTO Employee (Id, Salary) VALUES (5, 400); INSERT INTO Employee (Id, Salary) VALUES (6, 400);
五、解題SQLleetcode
上一題的解決方案能夠參考這篇Blog:http://my.oschina.net/Tsybius2014/blog/493086get
這道題與上一題的解法類似,即先將源數據按Salary列從大到小去重排序,再直接取出排序後結果集的第n行,這行數據Salary列的值就是第n大的工資。不一樣的是本題須要以函數的形式實現,注意LIMIT子句後面不要直接跟N-1。
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT BEGIN SET N = N - 1; RETURN ( SELECT CASE WHEN COUNT(Salary) >= 1 THEN ( SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT N, 1) ELSE NULL END AS NthSalary FROM Employee ); END
END