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;