Leetcode176第二高的薪水

閒着無聊來刷刷數據庫

題目:

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

+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+
例如上述 Employee 表,SQL查詢應該返回 200 作爲第二高的薪水。如果不存在第二高的薪水,那麼查詢應返回 null。

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

思路1:這種類型的題都是求在表中在一些條件不存在的數據,我們需要先查詢符合條件的,取反條件的即可。

比如這道題我們可以先查詢出在Employee中的最高薪水,設爲max,再在表中查詢比max小的最大值,也就是第二高的薪水

代碼奉上:

select max(e.Salary)as SecondHighestSalary from Employee e 
where e.Salary<(select max(e2.Salary) from Employee e2 );

思路二:可以利用Limit來做,將表中的數據倒序排列,有limit來控制取第幾條數據即可。

select ifNull((select distinct Salary from Employee
order by Salary Desc limit 1,1),null) as SecondHighestSalary;

 

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