閒着無聊來刷刷數據庫
題目:
編寫一個 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;