【刷题记录】3.第N高的薪水

227 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述:

题目来源:LeetCode>第N高的薪水

表:Employee

Column NameType
idint
salaryint

Id是该表的主键列。 该表的每一行都包含有关员工工资的信息。

编写一个SQL查询来报告 Employee 表中第 n 高的工资。如果没有第 n 个最高工资,查询应该报告为null 。

查询结果格式如下所示。

示例 1:

输入: Employee table:

idsalary
1100
2200
3300

n = 2

输出:

getNthHighestSalary(2)
200

示例 2:

输入: Employee 表:

idsalary
1100

n = 2

输出:

getNthHighestSalary(2)
null

二、思路分析:

  1. 获取第二高的薪水,首先会想到使用排序order by,默认是asc,即从小到大,若想降序则使用关键字 desc

  2. 当出现多个相同的数据时,需要去重,使用distinct

  3. 当不存在第N个数据时,需要返回null,则需要使用IFNULL方法

  4. 起别名,则需要使用关键字as

  5. 基于以上条件,可以使用limit对指定数据进行取用

  6. 第N高的薪水,其实是取第二高薪水的题目变形,主要核心还是在limit的使用上

三、AC 代码:

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
set N = N - 1;
  RETURN (
      SELECT IFNULL((
          SELECT DISTINCT Salary 
          FROM Employee
          ORDER BY Salary DESC LIMIT N,1),null) AS getNthHighestSalary
  );
END

四、总结:

  1. limit后不能跟运算,所以需要提前对N的值做处理。

  2. limit a,b:跳过a条取出b条数据

  3. distinct 去重

  4. order by 排序