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;

 

posted @ 2022-05-17 00:38  射手座的小怪兽  阅读(27)  评论(0编辑  收藏  举报