oracle TOP-N 与分页查询

一、Oracle 12C之前的TOP-N与分页查询
在Oracle 12C之前的查询中,如果要返回查询结果中前N条记录,或对查询结果进行分页显示,需要使用伪列rownum,对查询结果集进行排序。
例如:查询工资排序在6-10名的员工号、员工名、工资及工资排序号

select * from
(select rownum num,employee_id,first_name,last_name,salary from
(select employee_id,first_name,last_name,salary from employee order by salaryy desc) nested_order1
) nested_order2 
where num between 6 and 10;

二、在Oracle12C之后

在oracle12C中引入了row_limiting_clause短语,可以方便的返回结果集中需要的记录。

offset : 指定跳过结果集的记录数,即从结果集的第offset+1个记录开始返回
row  / rows : 使语句的语义更清晰,构成语法的完整性。两者没区别
fetch : 指定返回记录的数量 或 占整个结果集的百分比。如果没有指定改短语,则返回offset+1个记录开始的所有记录
frist / next : 使语句的语义更清晰,构成语法的完整性,两者没有区别
rowcount : 指定返回记录的数量
precent : 指定返回记录的数量占整个结果集的百分比
only : 表示实际返回的记录严格遵守指定返回的数量或百分比
with ties : 表示返回附加记录,这些附加记录与最后返回记录具有相同的排序字段值,此时select语句中必须具有order by 子句,否则不会返回附加记录

1.查询排在前5名的员工号,员工名,工资
select employee_id,first_name,last_name,salary
from employee
order by salary desc
fetch first 5 rows whith ties;

2.查询工资排在6-10名的员工号,员工名,工资
select employee_id,first_name,last_name,salary
from employee
order by salary desc
offset 5 rows fetch first 5 rows with ties;

3.查询5%的员工的员工号,员工名,员工工资
select employee_id,first_name,last_name,salary
from employee
order by salary desc
fetch first 5 precent rows with ties; 

注:with ties的作用
比如现在有一些数据.
col
 1
 3
 3
 2

如果此时,我要取 ...order by col fetch first 3 rows 
那结果就是1  2  3  只取一个3
如果加上with ties时,
则两个3都能取出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值