leetcode177:
image.png
代码如下:
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
SET N = N-1;
RETURN (
select DISTINCT Salary from Employee order by Salary DESC LIMIT N,1
);
END
解题思路:
第二高的薪水:
1.要想获取第二高,需要排序,使用 order by(默认是升序 asc,即从小到大),2.若想降序则使用关键字 desc
3.去重,如果有多个相同的数据,使用关键字 distinct 去重
4.判断临界输出,如果不存在第二高的薪水,查询应返回 null,使用 ifNull(查询,null)方法
5.起别名,使用关键字 as
因为去了重,又按顺序排序,使用 limit()方法,查询第二大的数据,即第二高的薪水,即 limit(1,1) (因为默认从0开始,所以第一个1是查询第二大的数,第二个1是表示往后显示多少条数据,这里只需要一条)
第 N 高的薪水:
题目是 176.第二高的薪水 的变形,将查询第二名变成查询 第N名
别名中不能带参数,limit()方法中不能参与运算,因为索引从0开始,所以要 - 1,最好在外面就设定好set N = N - 1
因此正确的代码是:
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
set N = N - 1;
RETURN (
# Write your MySQL query statement below.
select ifnull((
select distinct Salary
from Employee
order by Salary desc limit N,1),null) as getNthHighestSalary
);
END