【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;

同样的,通过子查询的方式就可以层层获取了

posted @ 2022-05-18 20:22  DbWong_0918  阅读(194)  评论(0编辑  收藏  举报