leetcode - 數據庫 - 176. 第二高的薪水

      解題目錄
      原題
      編寫一個 SQL 查詢,獲取 Employee 表中第二高的薪水(Salary) 。

+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+ 

      例如上述 Employee 表,SQL查詢應該返回 200 作爲第二高的薪水。如果不存在第二高的薪水,那麼查詢應返回 null。

+---------------------+
| SecondHighestSalary |
+---------------------+
| 200                 |
+---------------------+ 

      我感覺這道題挺簡單的,就是有幾個地方沒想到:
      1.如果只有兩條數據,工資都是100,那麼返回null而不是100。
      2.如果是100,200,300,400,那麼應該返回300而不是200。我發現我閱讀理解能力最近有點差…
      3. 記得最終結果加別名:SecondHighestSalary

      解題思路:因爲條件1,所以要去重;因爲條件2,所以要排序,還得是倒序;因爲條件3,改個別名。並且要注意,沒有數據返回null。
      我的答案:

select 
    if(count(s)=1,s,null) SecondHighestSalary
from(
	-- 寫hive寫的比較多,所以沒用distinct。
	select 
	    salary s
	from Employee
	group by s
	order by s
	limit 1,1
) tmp

      我感覺leetcode好像不太支持oracle…dense_rank()也可以做這道題,但是mysql裏沒這個函數,oracle裏纔有。我用oracle做的時候,老是莫名其妙的錯。。。
      最讓人無語的是,oracle的別名在leetcode的結果裏默認全是大寫,但是答案要求大小寫也要符合。。。但是我的sql裏的別名明明大小寫是正常的。。。我快要瘋了。
      
      
      

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