【Oracle】Oracle数据库,第N大数据取值
Oracle数据库,第N大数据取值
没想到力扣还有数据库的练习,正好本菜鸡跑过来练手
要显示第二大的数据可以使用order by进行排序,然后用limit对显示的数据进行限制,limit1,1,以此来限制显示内容
这个在mysql可以用的
但是在Oracle中,limit是不能用的
所以需要使用rownum这个虚列作为行号来用
如取出来第二大数据的方式可以用下面的操作实现
select nvl(
(select l.salary from (select t.salary,rownum req
from (select distinct salary from employee order by salary desc) t) l
where l.req > 1 and l.req < 3)
,NULL) as SecondHighestSalary from dual
使用rownum的时候有几个注意的地方
首先使用rownum一般来说都是小于号<相伴的,使用>的情况可能会一条数据都查不到,然后导致问题的发生
但是将其作为子查询来使用的话就不会有这种情况发生
那么通过函数即可实现取第N大数据的情况
CREATE FUNCTION getNthHighestSalary(N IN NUMBER) RETURN NUMBER IS
result number;
BEGIN
select nvl(ll.salary,NULL)
into result
from (select l.salary
from (select t.salary,rownum req
from (select distinct salary
from employee
order by salary desc) t) l
where l.req = N) ll;
RETURN result;
END;
同样的,通过子查询的方式就可以层层获取了
您能读到这儿,我呢是发自真心的感谢您,若要转载,还望请您带上链接