题目:
Write a SQL query to get the second highest salary from the Employee
table.
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
For example, given the above Employee table, the second highest salary is 200
. If there is no second highest salary, then the query should return null
.
题意:
给定一个员工表,其中有员工的Id和薪水,那么需要筛选出薪水第二高的值,如果没有找到第二高的薪水,那么就返回null。也就是如果没找到,则返回如下:
+-------------------------+
SecondHighestSalary
null
+-------------------------+
而不是返回Empty Set.
此题一开始我是这么写的:
select Salary as SecondHighestSalary from Employee group by Salary order by Salary desc limit 1,1;
这样写,就会出现一个问题,如果碰到没发现第二高的薪水,那么查询返回的结果直接就是Empty set。而题目中要求的是,返回的是null。后来看了一篇博客和discuss about this,发现其实针对null这个问题,MySQL语句还有另外的一个检测方式就是用 IFNULL来判断是否返回是null。所以博主顺便就脑补了下关于这个IFNULL的知识。
IFNULL(exp1,exp2);如果exp1不为null,则返回exp1;否则就返回exp2。
select IFNULL((select Salary from Employee group by Salary order by Salary desc limit 1,1),null) as SecondHighestSalary;