1. 程式人生 > 其它 >Leetcode SQL_#176_第二高的薪水

Leetcode SQL_#176_第二高的薪水

Leetcode SQL_#176_第二高的薪水

sql

Contents

題目


解答

select distinct Salary as SecondHighestSalary
from Employee
order by Salary desc
limit 1 offset 1

知識點:
offset關鍵字,跳過排序當中的第一個,那麼得到的就是第二大的數字

問題:

  • 這裡邊幾個關鍵字的順序問題,比如as應該放在哪裡?limit和offset有沒有嚴格的先後順序?
    * as要放在欄位名稱之後,from之前,因為我是重新命名了一個欄位
    * 實驗證明,limit必須在前,offset在後,不然會報語法錯誤
  • 答案存在的漏洞:可能表中不同的工資只有1種,用了offset 1就是有問題的。

使用臨時表

第二行括號裡的select查詢出來的結果就是一個臨時表

select 
(select distinct Salary from Employee order by Salary desc limit 1 offset 1) 
as SecondHighestSalary;

使用ifnull()函式

ifnull(A,B):判斷A是否是null,如果是null會返回預設值B

select
ifnull((select distinct Salary from Employee order
by Salary desc limit 1 offset 1),null) as SecondHighestSalary;

注意:ifnull裡邊的第一項是一個select查詢出來的臨時表,需要加上括號