题目
编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200 |
+---------------------+
解题思路
知识点
-
要查询第二高薪水,排序 是需要的,而且是逆序 DESC,再有就是 DISTINCT 关键字,去除重复薪水(Salary);
-
第二高薪水,就要用到 LIMIT 和 OFFSET,LIMIT 限定返回的个数,OFFSET 表示跳过几个;
-
如果不存在,则返回空,要用到 IFNULL 函数,IFNULL函数表达式如下:
IFNULL(expr1,expr2) 如果 expr1 为空,则表达式值为 expr2,反之为 expr1。
代码实现
SELCT IFNULL((SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT 1 OFFSET 1), NULL) AS SecondHighestSalary
查询结果
第二高薪水不为空时
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200 |
+---------------------+
第二高薪水不为空时
+---------------------+
| SecondHighestSalary |
+---------------------+
| null |
+---------------------+
END
以上就是这道题全部解题过程,有不足的地方,望指正