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

本文介绍在Oracle数据库中处理varchar2类型的ID字段的方法,包括转换为数值类型、按降序排列查询、使用MAX函数获取最大值及通过ROWNUM获取第二大值的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们以机构表为例,机构表中的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,仍不符合条件,直至遍历完所有数据,都无数据返回。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值