176. 第二高的薪水

前言

「算法题解」系列致力于分享有价值的题目、探讨更优秀的解法。

这是本系列的第 21 篇题解,更多题解关注 Somnia1337@力扣。

题目描述

难度:🟡中等

标签:#数据库

Employee 表:

Employee
+-------------+------+
| Column Name | Type |
+-------------+------+
| id          | int  |
| salary      | int  |
+-------------+------+

输出表:

Output
+---------------------+
| SecondHighestSalary |
+---------------------+

查询并返回 Employee 表中第二高的薪水。如果不存在第二高的薪水,查询应该返回 null

输入:
Employee 表:
+----+--------+
| id | salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+
输出:
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200                 |
+---------------------+

解题思路

1. 排序:选第二高

降序排序,选择第 2 个。

SELECT
    (
        SELECT DISTINCT
            salary
        FROM
            Employee
        ORDER BY -- 按 salary 属性降序排序
            salary DESC
        LIMIT -- 只选 1 个
            1
        OFFSET -- 偏移 1 位(跳过最高)
            1
    ) AS secondHighestSalary; -- 别名
2. 子查询:选小于最高的最高

选择小于最大值的数据中的最大值。

SELECT
    MAX(salary) AS secondHighestSalary -- 别名
FROM
    Employee
WHERE
    salary < ( -- 子查询: 选择最高者
        SELECT
            MAX(salary)
        FROM
            Employee
    );

最后

更多系列「外源推文」&「生活分享」关注公众号: