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/