站长网 百科 Oracle SQL – 如何检索列的最高5个值

Oracle SQL – 如何检索列的最高5个值

如何编写一个查询,其中只返回最多或最低列值的选定行数. 即有五名最高工资的雇员的报告? 最好的方法是使用分析函数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()或其中一个排名函数.

本文来自网络,不代表站长网立场,转载请注明出处:https://www.zwzz.com.cn/html/baike/2021/0523/4913.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部