首页 > 数据库 > mysql教程 > Oracle SQL 中的 RANK() 和 DENSE_RANK() 有什么区别?

Oracle SQL 中的 RANK() 和 DENSE_RANK() 有什么区别?

DDD
发布: 2025-01-25 00:04:14
原创
806 人浏览过

What's the Difference Between RANK() and DENSE_RANK() in Oracle SQL?

oracle sql:理解rank()和dense_rank()

> RANK()>本文阐明了Oracle SQL中DENSE_RANK()函数之间的关键差异,重点关注其排名行为,尤其是在处理纽带和无效值时。

密钥差异: >两个函数都基于指定的订单将排名分配给数据集中的行。 至关重要的差异在于他们处理领带:

  • :将相同的等级分配给捆扎行,从而导致排名序列的差距。 如果多行共享等级,则下一个排名跳过了领先的排名。例如,如果第二排的三行领带,他们都将获得“ 2”等级,下一个排名将为“ 5”。

    > RANK()

  • :即使有联系,分配连续的排名也没有空白。 没有排名;排名序列保持连续。

    DENSE_RANK()

实用应用:查找第n级最高薪水

> >使用

>从

>表中检索n的最高工资,您可以使用与此类似的查询(尽管存在更有效的方法):> emptbl RANK()这将其排名为“降序”和“所需等级”的行薪水。

<code class="language-sql">SELECT empname
FROM (SELECT empname, RANK() OVER (ORDER BY sal DESC) as sal_rank FROM emptbl)
WHERE sal_rank = n;</code>
登录后复制

null值处理:

零值的处理取决于子句。 如果首先订购了null,则将获得最低等级。如果订购了最后(),他们将获得最高等级。

>

ORDER BY说明性示例:ORDER BY sal NULLS FIRST ORDER BY sal NULLS LAST

让我们用示例数据检查一下:

查询:

产生的结果清楚地显示了差异:
<code>DEPTNO  EMPNAME    SAL
------------------------------
10       rrr    10000.00
11       nnn    20000.00
11       mmm    5000.00
12       kkk    30000.00
10       fff    40000.00
10       ddd    40000.00
10       bbb    50000.00
10       ccc    50000.00</code>
登录后复制
>演示级别跳过,而

>和

>显示连续排名的零等级的处理方式有所不同。 输出表将在视觉上表示不同的排名行为。 (注意:该示例假定一个名为
<code class="language-sql">SELECT empname, deptno, sal,
       RANK() OVER (PARTITION BY deptno ORDER BY sal NULLS FIRST) as rnk,
       DENSE_RANK() OVER (PARTITION BY deptno ORDER BY sal NULLS FIRST) as drnk_first,
       DENSE_RANK() OVER (PARTITION BY deptno ORDER BY sal NULLS LAST) as drnk_last
FROM emptbl;</code>
登录后复制
的表,并在提供的数据中替换为实际的表名。)

以上是Oracle SQL 中的 RANK() 和 DENSE_RANK() 有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板