LeetCode数据库---176. 第二高的薪水
题目:
Employee 表: +-------------+------+ | Column Name | Type | +-------------+------+ | id | int | | salary | int | +-------------+------+ id 是这个表的主键。 表的每一行包含员工的工资信息。 编写一个 SQL 查询,获取并返回 Employee 表中第二高的薪水 。如果不存在第二高的薪水,查询应该返回 null 。 查询结果如下例所示。 示例 1: 输入: Employee 表: +----+--------+ | id | salary | +----+--------+ | 1 | 100 | | 2 | 200 | | 3 | 300 | +----+--------+ 输出: +---------------------+ | SecondHighestSalary | +---------------------+ | 200 | +---------------------+ 示例 2: 输入: Employee 表: +----+--------+ | id | salary | +----+--------+ | 1 | 100 | +----+--------+ 输出: +---------------------+ | SecondHighestSalary | +---------------------+ | null | +---------------------+ 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/second-highest-salary
知识点:
1. LIMIT、LIMIT OFFSET
LIMIT y 分句表示: 读取 y 条数据
LIMIT x, y 分句表示: 跳过 x 条数据,读取 y 条数据
LIMIT y OFFSET x 分句表示: 跳过 x 条数据,读取 y 条数据(LIMIT 后面只能有一个参数)
LIMIT n 等价于 LIMIT 0,n
例子:
SELECT * FROM table LIMIT 2,1; //跳过2条数据读取1条数据,即读取第3条数据
SELECT * FROM table LIMIT 2 OFFSET 1; //跳过1条数据读取2条数据,即读取2-3条数据
2. IFNULL(a, b)
如果value1不是空,结果返回a
如果value1是空,结果返回b
---
注意:
因为表里可能只有一条记录,所以需要判断一下为NULL的状态
salary可能有重复的,必须要DISTINCT去重
# 子查询的特质,子查询数据出虚表,嵌套查询虚表,如果查询不到会返回null select( select distinct salary from Employee order by salary DESC limit 1,1 ) as SecondHighestSalary
或者用IFNULL
select ifnull( (select distinct salary from Employee order by salary DESC limit 1,1),null ) as SecondHighestSalary;
IN A WORLD LIKE THIS
萬物之中,希望至美;至美之物,永不凋零