编写一个 SQL 查询,获取 Employee 表中第 n 高的薪水(Salary)。
示例
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
例如上述 Employee 表,n = 2 时,应返回第二高的薪水 200。如果不存在第 n 高的薪水,那么查询应返回 null。
+------------------------+
| getNthHighestSalary(2) |
+------------------------+
| 200 |
+------------------------+
首先需要解决几个问题:
N
是第几个数,和索引的关系是 N-1
Salary
并且是降序排序desc
N
个元素有应该方法, limit N,N
或者是limit N,1
.这两个的理解是不一样的,第一个理解是我取出第 N
个元素到第 N
的个元素。后面的理解是,我取出第N页的元素,每页是1个元素。(这里的 N
是索引 N
,相当于原本的 N=N-1
了)Salary
查询之后的名字是 getNthHighestSalary
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
个人记录,新手入门,多多学习,欢迎大家交流探讨!
个人网站: http://106.54.78.238/
song_of _sea的个人网站 http://106.54.78.238/