返回第二高分数
难点解析
limit:限时返回的个数或行数
offset:跳过几个
limit 1 offset 1:返回一个结果,跳过一个
例如返回第三高就是:limit 1 offset 2
代码
select ( select distinct Salary from Employee
order by Salary desc
limit 1 offset 1 )
as SecondHighestSalary;
返回第N高分数
难点解析
1、 输出题目要求的内容所需要的语句和题目176大致是相同的,唯一不同的是limit后的数字,即start的位置。
2、limit start, count。其中start的显示值是从start+1开始的。但此处输入不能是计算式,比如:N-1
3、第N高的N,是通过自定义函数getNthHighestSalary的(N INT)中N传入。start必须是从N-1开始,才能显示符合题目要求的结果。比如第N=2高,如果直接用N值到limit,limit 2,1,意为从第3行开始,显示一行。所以要用N-1=1,才能表示从第二行开始。
4、这时,应通过一个替代参数实现。MySQL自定函数中的参数是静态参数,即要先定义后使用。先用declare定义类型,后通过set进行赋值
代码
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
declare m int;
set m=N-1
RETURN (
select ifnull((select distinct Salary from Employee
order by Salary desc
limit m,1),null)
);
end
函数详解
limit :(start, count)
start:从第几行的下一行开始找
count:找几个
select * from table limit 5,10;
从第6行开始,查10行,即:查找6-15
limit a offset b
他代表的意思是跳过b条数据后查询a条
ifnull
条件判断,不满足返回null
distinct
去重