Mysql 查询第二高,第N高分数.limit、offset、distinct

返回第二高分数

在这里插入图片描述

难点解析

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

去重

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值