Oracle数据库表中查询最大值和第二大值

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hailangswpi/article/details/71480061

我们以机构表为例,机构表中的id字段是varchar2类型的,而不是number类型,所有要先转换为number。

select to_number(id) as id from ORGANIZATION;

运行效果如下图所示:


我们按降序排序来查询,

select to_number(id) as id from ORGANIZATION ORDER BY id DESC;

如下图所示:

我们不使用order by,而用max()函数来获取最大的值

select max(to_number(id)) from ORGANIZATION;

运行效果如下图所示:我们得到最大值为33.


现在我们要找出第二大值,我们要使用到ROWNUM,我们先查询出最大值和第二大值。

select * from (select to_number(id) as id from ORGANIZATION ORDER BY id desc) where ROWNUM<3;

运行效果如下图所示:


有了最大值和第二大值,如何查询出第二大值呢?

我们可以使用如下语句来查看这些结果是如何排序的。

select ROWNUM r,id from(select to_number(id) as id from ORGANIZATION ORDER BY id desc);


接下来,我们就可以在上面的基础上稍作处理,就可以查询出第二大值这条记录了

select * from (select ROWNUM r,id from(select to_number(id) as id from ORGANIZATION ORDER BY id desc)where ROWNUM<3) e where e.r>1 ;

运行效果如下图:



我们不能使用如下语句来得到第二大值:

select id from (select to_number(id) as id from ORGANIZATION ORDER BY id desc) where ROWNUM<3 and ROWNUM>=2

运行结果是空


这是为什么呢?

因为rownum是oracle预处理字段,默认标序是1,只有记录集已经满足条件后才会进行后续编号。这样你查询ORGANIZATION  表时遍历第一条数据时rownum是1,不符合条件,继续遍历到第二条数据rownum仍为1,仍不符合条件,直至遍历完所有数据,都无数据返回。

展开阅读全文

没有更多推荐了,返回首页