題目描述:
編寫一個 SQL 查詢,獲取 Employee 表中第二高的薪水(Salary) 。
±—±-------+
| Id | Salary |
±—±-------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
±—±-------+
例如上述 Employee 表,SQL查詢應該返回 200 作爲第二高的薪水。如果不存在第二高的薪水,那麼查詢應返回 null。
±--------------------+
| SecondHighestSalary |
±--------------------+
| 200 |
±--------------------+
Oracle解法:
select salary SECONDHIGHESTSALARY from (
select rownum as numSa,salary from employee order by salary desc
) where numSa='2'
Oracle查詢不到結果返回值即爲空,但是LeetCode會判錯,這是bug,無須在意
**Mysql解法1:**將不同的薪資按降序排序,然後使用 LIMIT 子句獲得第二高的薪資,然而,如果沒有這樣的第二最高工資,這個解決方案將被判斷爲 “錯誤答案”,因爲本表可能只有一項記錄。爲了克服這個問題,我們可以將其作爲臨時表。
SELECT
(SELECT DISTINCT
Salary
FROM
Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1) AS SecondHighestSalary
;
**Mysql解法2:**解決 “NULL” 問題的另一種方法是使用 “IFNULL” 函數
SELECT
IFNULL(
(SELECT DISTINCT Salary
FROM Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1),
NULL) AS SecondHighestSalary
知識點:Mysql limit offset 用法
語句1:select * from student limit 9,4
語句2:slect * from student limit 4 offset 9
// 語句1和2均返回表student的第10、11、12、13行
//語句2中的4表示返回4行,9表示從表的第十行開始
通過limit和offset 或只通過limit可以實現分頁功能。
假設 numberperpage 表示每頁要顯示的條數,pagenumber表示頁碼,那麼 返回第pagenumber頁,每頁條數爲numberperpage的sql語句:
代碼示例:
語句3:select * from studnet limit (pagenumber-1)*numberperpage,numberperpage
語句4:select * from student limit numberperpage offset (pagenumber-1)*numberperpage
參考:
https://blog.csdn.net/l1212xiao/article/details/80520330
https://leetcode-cn.com/problems/second-highest-salary/