Employee表:

+-------------+------+
| Column Name | Type |
+-------------+------+
| id          | int  |
| salary      | int  |
+-------------+------+

id 是这个表的主键。
表的每一行包含员工的工资信息。
查询并返回 Employee 表中第二高的 不同 薪水 。如果不存在第二高的薪水,查询应该返回 null(Pandas 则返回 None) 。
查询结果如下例所示。

样例


Example

示例 1:
输入:
Employee 表:

+----+--------+
| id | salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+

输出:

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

示例 2:
输入:
Employee 表:

+----+--------+
| id | salary |
+----+--------+
| 1  | 100    |
+----+--------+

输出:

+---------------------+
| SecondHighestSalary |
+---------------------+
| null                |
+---------------------+

思路


首先写出去重并降序查询薪水的SQL:

select distinct salary as SecondHighestSalary 
from Employee
order by salary as desc

要第二高,就一条一页然后取第二页:

limit 1, 1

这样我们得到了查询第二高的不同薪水的SQL语句,但是可能去重之后数据并不够两条。题目要求此时返回null而不是空,注意到这是一个一行一列的查询,因此将其转换为标量子查询,利用标量子查询会将空集转换为NULL的特性来满足题目要求。

答案


MySQL

select 
(
select distinct salary
from Employee
order by salary desc
limit 1, 1
) as SecondHighestSalary;