sql排序输出第n个字段 方法汇总

标题

方法一:
limit A offset B

select distinct Salary as SecondHighestSalary
from Employee 
order by Salary Desc
limit 1 offset 1;

在这里插入图片描述
由于没有考虑如果没有第二个字段怎么办。
改进:

select 
(select distinct Salary as SecondHighestSalary
from Employee 
order by Salary Desc
limit 1 offset 1) as SecondHighestSalary;

这里使用了临时表。

但是我看官方题解里还给了第二种方法:

方法二:
使用LIMIT + IFNULL,其实我觉得和临时表的写法几乎一样,不过千万记住,思路完全不同。

select 
ifnull(
(select distinct Salary as SecondHighestSalary
from Employee 
order by Salary Desc
limit 1 offset 1),null) 
as SecondHighestSalary;

不过当我们改为第二种方法的时候大大减少了时间的消耗:
在这里插入图片描述
可以说直接提高了一倍,说明临时表的生成是比较低效测处理方法。

不过我后来还想了,如果我们想要第二高,那是不是就是小于最大的薪资的那个数据,本来想在leecode上发一下我的想法,结果发现已经有人很早就这么写了,唉 ,历害人还是多呀。

方法三:
虽然这不是普式方法,但是对于这道题,效率极高:

select max(Salary) as SecondHighestSalary
from Employee
where Salary < (select max(Salary) from Employee);

大家共勉~~

猜你喜欢

转载自blog.csdn.net/qq_40742298/article/details/105440857