题目(来源:176. 第二高的薪水 - 力扣(LeetCode)):
Employee
表:
+-------------+------+ | Column Name | Type | +-------------+------+ | id | int | | salary | int | +-------------+------+ 在 SQL 中,id 是这个表的主键。 表的每一行包含员工的工资信息。
并返回 Employee
表中第二高的薪水 。如果不存在第二高的薪水,查询应该返回 null(Pandas 则返回 None)
。
查询结果如下例所示。
示例 1:
输入: Employee 表: +----+--------+ | id | salary | +----+--------+ | 1 | 100 | | 2 | 200 | | 3 | 300 | +----+--------+ 输出: +---------------------+ | SecondHighestSalary | +---------------------+ | 200 | +---------------------+
示例 2:
输入: Employee 表: +----+--------+ | id | salary | +----+--------+ | 1 | 100 | +----+--------+ 输出: +---------------------+ | SecondHighestSalary | +---------------------+ | null | +---------------------+
题解:
- 首先获取去重后的薪水列表。
- 然后按薪水降序排序。
LIMIT 1 OFFSET 1
: 跳过第一个薪水,获取第二个薪水。
然后,IFNULL
函数用于处理可能的空结果集,确保在第二高薪水不存在时返回 NULL
。
解决(mysql):
SELECT IFNULL(
(SELECT DISTINCT Salary
FROM Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1),
NULL
) AS SecondHighestSalary;
知识点:
IFNULL(expression, substitute_value)在MySQL中,IFNULL()是一个内置函数,用于处理空值(NULL)。IFNULL()函数接受两个参数:要检查的表达式和替代值。如果表达式的值是NULL,则返回替代值,否则返回表达式的值。