176. 第二高的薪水
SQL架构
编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200 |
+---------------------+
题解:
我们直接按照降序排序后接着分页即可,但是需要注意的是可能会出现薪水相等的情况,因此我们需要去重后再降序分页,并且要注意当只有一个薪水时是不会有第二高的薪水的,因此此时应该返回null,但是如果直接查询的话对于null的情况,按照上述语句实际上只能什么都不返回,即查不到数据,所以我们要再套一个select,这样对于null的情况就会查到并且返回了。
即利用了 select null 查到的数据是null ;
或者使用ifnull函数;
子查询数据出虚表嵌套查询虚表,如果查询不到会返回null
代码:
select (
select distinct Salary
from Employee
order by Salary DESC
limit 1,1
) SecondHighestSalary
select ifnull(
( select distinct Salary SecondHighestSalary
from Employee
order by Salary DESC
limit 1,1
),null )
SecondHighestSalary