❤️博客主页: 楚生辉
❤️系列专栏:【LeetCode刷题】
❤️一句短话: 坚持不懈,孜孜不倦
1.题目描述
表: 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 |
+------------------------+
2.代码实现
使用自定义函数
注意:索引从0开始,所以要 - 1,最好在外面就设定好 set N = N - 1
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)
);
END
limit n, 1,代表从第n条数据开始查询,1代表查询的条数(只查询一条)
limit 0,1 其实就代表查询第一条数据
limit 1,1 其实就代表查询第二条数据
limit 1 offset 1:limit后面的数字是查询几条数据,offset后面的数据是从哪条数据开始查询
limit 2 offerset 3:也就是查询4和5这两条数据

被折叠的 条评论
为什么被折叠?



