目录
题目链接
// 176. 第二高的薪水
往期相关基础内容讲解博客
// 表的查询
题目详解
1. 题目内容
// 查询并返回 Employee
表中第二高的 不同 薪水 。如果不存在第二高的薪水,查询应该返回 null(Pandas 则返回 None)
。
2. 解题思路
// 因为我们的查询只涉及到一个表, 并且查询不能一次就得出结果, 所以我们需要用到的查询方式就是子查询
// 题目中涉及了两个关键词 "第二" 和 "null", 所以我们需要注意的就是这两个点, 另外还需要确保这个 "第二" 和 "第一" 不能重复, 所以在查 "第一" 的时候还需要用到一个关键词 "distinct" (去重复)
// "null" 值的确定就需要 ifNull(a, b) 函数来判断, 这个函数表示如果不为空返回 a, 为空则返回 b
// 查询 "第二", 可以是先查到最大值, 然后通过比较得到第二大的值; 也可以使用 limit 和 offset 语句 (limit n offset m 分句表示查询结果跳过 m 条数据, 读取前 n 条数据) 进行降序后查询
3. 代码编写
3.1 使用简单子查询
select
ifNull(
(select
max(distinct salary)
from
Employee
where
salary < (select
max(distinct salary)
from
Employee
)
),null
)
as SecondHighestSalary;
3.2 使用 limit 和 offset 查询
select
ifNull(
(select
distinct salary
from
Employee
order by
Salary Desc
limit 1,1),null)
as SecondHighestSalary;