肯定要先排序,后取行才能保证结果正确。 但是sql语句里头必须 where rownum先执行再order by 所以,只能使用嵌套select了。
--如上查询等价于SELECT * FROM ( SELECT --* 不支持*,MS SQL支持的 EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO, ROW_NUMBER() OVER( ORDER BY SAL DESC)AS RANK FROM emp )B WHERE B.RANK <=2这里的B其实是个结果集,你可以把它看做一个表.而且它是按照SAL 逆排序的。 然后你取出前两条。
select * from emp order by sal desc where rownum<=2;不是一样么?from后面可以跟表,多行值可以看成表啊。
第二个语句会将前两条记录拿出来按照sql倒排序
Oracle:先排序,再去多少行,否则查询不准确
--楼主的是把里面的结果集作为一个虚报
--可以这样
select * from emp where rownum<=2 order by sal desc
但是sql语句里头必须 where rownum先执行再order by
所以,只能使用嵌套select了。
--如上查询等价于SELECT * FROM
(
SELECT --* 不支持*,MS SQL支持的
EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,
ROW_NUMBER() OVER( ORDER BY SAL DESC)AS RANK FROM emp
)B
WHERE B.RANK <=2这里的B其实是个结果集,你可以把它看做一个表.而且它是按照SAL 逆排序的。
然后你取出前两条。