目录
- 1、原始数据
- 2、获取最大值记录
- 3、获取第二大值记录
- 4、获取第三大值记录
1、原始数据
select * from test_2024_04_15_001 order by 销量 desc,渠道
2、获取最大值记录
select 渠道,销量
from
(
select a.渠道, a.销量 from test_2024_04_15_001 a
order by a.销量 desc,a.渠道
)
where rownum =1
3、获取第二大值记录
select 渠道,销量
from
(
select a.渠道, a.销量 from test_2024_04_15_001 a
order by a.销量 desc,a.渠道
)
where rownum =2
发现并没有数据返回
因为rownum并不是当作实体数据存放在每一张表中,而是在每一次select查询的时候,根据基表的默认insert顺序由oracle动态分配的,有1才有2,如果rownum没有1,那么2也就没有了意义,所以这个查询就不会有任何结果出来。
此时可以先取出前N大的值,到序排序,再获取第一行数据,及第N大的值
select 渠道,销量
from
(
select 渠道,销量
from
(
select a.渠道, a.销量 from test_2024_04_15_001 a
order by a.销量 desc,a.渠道
)
where rownum <=2
order by 销量,渠道
)
where rownum =1
4、获取第三大值记录
select 渠道,销量
from
(
select 渠道,销量
from
(
select a.渠道, a.销量 from test_2024_04_15_001 a
order by a.销量 desc,a.渠道
)
where rownum <=3
order by 销量,渠道
)
where rownum =1
发现取出的记录和第二大的值记录一样
通过row_number实现,是正常显示的
select t1.渠道,t1.销量
from
(
select a.渠道, a.销量,row_number() over(order by a.销量 desc,a.渠道) rumfrom test_2024_04_15_001 a
) t1
where rum =3