一個初中級實習程序員面試的必經之路———mysql面試常見題(二)

難受,本以爲熟悉了常見的sql語句後刷題沒啥問題,今天力扣怒刷20題,還是不行。正確率還是達不到想要的水平。一個初級後端程序員還是要兼具初級數據庫管理員的大旗,奮鬥在一線數據庫維護中。以後本篇長期更新在數據庫刷題中做錯的題,以及分析解決思路

習題一:

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

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

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

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

題解:

我們正常的思路是在排除最大的裏面找最大,即爲第二大。

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

但是我們舉一反三的想一想,如果我們要查的是第三或者第四大的時候怎麼辦,我們按上面的嵌套的方法就明顯的不適用了;

所以我們要換一種思路,用上排序和分頁。

高,DESC 排序
LIMIT 位移偏移量加以限制
 如果沒有值,則返回 null,可以通過臨時表或者IFNULL

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

以上方法,就很完美的解決了這個問題。如果有更好的思路,歡迎各位大佬指教,謝謝。

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