猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
Oracle SQL-如何检索列的前5个值
如何编写查询,其中仅返回具有最高或最低列值的选定行数。
例如,一份薪水最高的5位员工的报告?
aluckdog
浏览 928
回答 3
3回答
慕的地6264312
最好的方法是使用分析函数RANK()或DENSE_RANK()...SQL> select * from ( 2 select empno 3 , sal 4 , rank() over (order by sal desc) as rnk 5 from emp) 6 where rnk <= 5 7 / EMPNO SAL RNK---------- ---------- ---------- 7839 5000 1 7788 3000 2 7902 3000 2 7566 2975 4 8083 2850 5 7698 2850 56 rows selected.SQL>出现平局时,DENSE_RANK()压缩间隙:SQL> select * from ( 2 select empno 3 , sal 4 , dense_rank() over (order by sal desc) as rnk 5 from emp) 6 where rnk <= 5 7 / EMPNO SAL RNK---------- ---------- ---------- 7839 5000 1 7788 3000 2 7902 3000 2 7566 2975 3 8083 2850 4 7698 2850 4 8070 2500 57 rows selected.SQL>您更喜欢哪种行为取决于您的业务需求。还有ROW_NUMBER()分析函数,我们可以使用它返回精确的行数。但是,除非业务逻辑愿意在出现平局的情况下随意截断结果集,否则我们应避免使用基于行号的解决方案。要求获得五个最高值与按最高值排序的前五个记录有所不同还有使用ROWNUM伪列的非解析解决方案。这很笨拙,因为在ORDER BY子句之前应用了ROWNUM,这可能导致意外结果。几乎没有任何理由使用ROWNUM而不是ROW_NUMBER()或排名函数之一。
0
0
0
www说
试试这个:SELECT * FROM (SELECT field1, field2 FROM fields order by field1 desc) where rownum <= 5还请查看该资源,以获取有关rownum工作原理的更详细描述。
0
0
0
月关宝盒
在Oracle 12c中,可以使用FETCH..FIRST ROWS..ONLY获取前5名最高薪水。 SELECT * FROM EMPLOYEES ORDER BY SALARY DESCFETCH FIRST 5 ROWS ONLY;
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
MySQL
Oracle
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续