LeetCode刷題之旅【數據庫篇】簡單 - 3:第二高的薪水

2019年11月15日

目錄

題目

解題1

解題2

解題3


題目

解題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 即從第二條開始,取一條數據,也就取到了第二高的薪水。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章