Oracle SQL – 如何检索列的最高5个值
发布时间:2021-05-23 21:51:51 所属栏目:站长百科 来源:网络整理
导读:如何编写一个查询,其中只返回最多或最低列值的选定行数. 即有五名最高工资的雇员的报告? 最好的方法是使用分析函数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 =
如何编写一个查询,其中只返回最多或最低列值的选定行数. 即有五名最高工资的雇员的报告? 最好的方法是使用分析函数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 5 6 rows selected. SQL> DENSE_RANK()在有一个关系时压缩空白: SQL> select * from ( 2 select empno 3,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 5 7 rows selected. SQL> 您喜欢哪种行为取决于您的业务需求. 还有一个ROW_NUMBER()分析函数可以用来返回精确的行数.但是,我们应该避免使用基于行号的解决方案,除非业务逻辑很乐意在发生冲突的情况下任意截断结果集.要求五个最高值和前五个记录按高值排序有所不同 还有一个使用ROWNUM伪列的非分析解决方案.这是笨重的,因为ROWNUM在ORDER BY子句之前应用,这可能导致意想不到的结果.很少有任何理由使用ROWNUM而不是ROW_NUMBER()或其中一个排名函数. (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |