那只能是借助rownum来实现了. oracle中在加了rownum之后可进行排序。
使用rownum,一般是筛选部分行数为结果,所以若再排序,只是对部分结果进行排序,可能不是所需要的结果。
若在oracle先排序再rownum,则使用SQL嵌套可以实现,比如
select * from (select * from test order by a) where rownum<10;
虽然此sql可实现,排序后查询前10条的数据,根据实际需要修改即可。
--用分析函数
select * from
(
select t.*,row_number() over(order by sal desc) rn from emp t
) t where rn<5;
SQL> SELECT A.*,ROWNUM FROM(SELECT * FROM EMP ORDER BY SAL) A WHERE ROWNUM <=5;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ROWNUM
----- ---------- --------- ----- ----------- --------- --------- ------ ----------
7369 SMITH CLERK 7902 1980-12-17 800.00 20 1
7900 JAMES CLERK 7698 1981-12-3 950.00 30 2
7876 ADAMS CLERK 7788 1987-5-23 1100.00 20 3
7521 WARD SALESMAN 7698 1981-2-22 1250.00 500.00 30 4
7654 MARTIN SALESMAN 7698 1981-9-28 1250.00 1400.00 30 5