LeetCode刷题(0008)---177. 第N高的薪水,sql,mysql

LeetCode—177. 第N高的薪水

01题目描述:

编写一个 SQL 查询,获取 Employee 表中第 n 高的薪水(Salary)。

示例


+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+

例如上述 Employee 表,n = 2 时,应返回第二高的薪水 200。如果不存在第 n 高的薪水,那么查询应返回 null。


+------------------------+
| getNthHighestSalary(2) |
+------------------------+
| 200                    |
+------------------------+

02题目分析:

首先需要解决几个问题:

  • N 是第几个数,和索引的关系是 N-1
  • 排序是以Salary并且是降序排序desc
  • 取出第N个元素有应该方法, limit N,N或者是limit N,1.这两个的理解是不一样的,第一个理解是我取出第 N 个元素到第 N 的个元素。后面的理解是,我取出第N页的元素,每页是1个元素。(这里的 N 是索引 N ,相当于原本的 N=N-1 了)
  • Salary 查询之后的名字是 getNthHighestSalary

03解答:


CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
	# 索引比顺序要小一,获取的是索引
    set N=N-1;
  RETURN (
      # Write your MySQL query statement below.
      select Salary as getNthHighestSalary
      from Employee
      # 分组,如果两个一样的话,100,100就不存在第二高
      group by Salary
      # 按照Salary降序排序
      order by Salary desc
      # 取出第N页,每页一个元素
      limit N,1
  );
END
            

运行结果:

在这里插入图片描述

3.1耗时分布情况

在这里插入图片描述

04结语:

个人记录,新手入门,多多学习,欢迎大家交流探讨!
个人网站: http://106.54.78.238/
song_of _sea的个人网站 http://106.54.78.238/

猜你喜欢

转载自blog.csdn.net/weixin_44824717/article/details/108026893