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

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

一、题目描述:

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

表:Employee

Column Name Type
id int
salary int

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

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

查询结果格式如下所示。

示例 1:

输入:
Employee table:

id salary
1 100
2 200
3 300

n = 2

输出:

getNthHighestSalary(2)
200

示例 2:

输入: Employee 表:

id salary
1 100

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 排序

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享