2019年11月15日
目錄
題目
解題1
查找中間表數據,然後排序中間表數據,從第2個數據開始取,偏移量爲1
# Write your MySQL query statement below
SELECT (
SELECT DISTINCT
Salary
FROM
Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1
) as SecondHighestSalary;
解題2
select max(Salary) SecondHighestSalary
from Employee
where Salary <> (select max(Salary) from Employee );
- 使用max的聚合函數
- 子查詢會產生兩次IO, 數據量大時很慢吧?
解題3
select ifnull ((
select distinct Salary from Employee order by Salary desc limit 1,1),null)as SecondHighestSalary ;
作者:he-qing-ping
鏈接:https://leetcode-cn.com/problems/second-highest-salary/solution/di-er-gao-xin-shui-by-he-qing-ping/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
首先回顧一下MySQL的isfull 與limit的用法
- ifnull(value1,value2)
1、如果value1不爲空,結果返回value1。
2、如果value1爲空,結果返回value2。同上
- Limit x 返回多少條數據 limit x,y 從第X+1條開始,返回y條。
- 然後對數據進行去重,用distinct,再對去重後的數據進行降序排序,用limit 1,1 即從第二條開始,取一條數據,也就取到了第二高的薪水。