gpt4 book ai didi

sql - Oracle SQL-如何检索列的前5个值

转载 作者:行者123 更新时间:2023-12-03 14:34:26 26 4
gpt4 key购买 nike

如何编写查询,其中仅返回具有最高或最低列值的选定行数。

即一份薪水最高的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 <= 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 , 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 5

7 rows selected.

SQL>


您更喜欢哪种行为取决于您的业务需求。

还有ROW_NUMBER()分析函数,我们可以使用它返回精确的行数。但是,除非业务逻辑愿意在出现平局的情况下随意截断结果集,否则我们应避免使用基于行号的解决方案。要求获得五个最高值与按最高值排序的前五个记录有所不同

还有使用ROWNUM伪列的非解析解决方案。这很笨拙,因为在ORDER BY子句之前应用了ROWNUM,这可能导致意外结果。几乎没有任何理由使用ROWNUM而不是ROW_NUMBER()或排名函数之一。

关于sql - Oracle SQL-如何检索列的前5个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2306744/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com