ホームページ > データベース > 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()

の理解 この記事では、特にネクタイとヌルの値を扱う場合、ランキングの動作に焦点を当てて、Oracle SQLの

関数とRANK()関数の重要な違いを明確にしています。 DENSE_RANK()

重要な違い:

両方の関数は、指定された順序付けに基づいてデータセット内の行にランクを割り当てます。 重要な違いは、ネクタイの取り扱いにあります:

  • :同じランクを結び付けられた行に割り当て、ランキングシーケンスにギャップをもたらします。 複数の行がランクを共有する場合、次のランクはタイのランクをスキップします。たとえば、3行が2位になっている場合、それらはすべて「2」のランクを受け取り、次のランクは「5」になります。

    RANK()

  • :ネクタイがあっても、ギャップなしで連続したランクを割り当てます。 ランクのスキップはありません。ランキングシーケンスは連続したままです
  • DENSE_RANK()

    実用的なアプリケーション:n第nの最高給与を見つける

を使用してテーブルから最高の給与を取得するには、これに類似したクエリを使用できます(より効率的な方法は存在します):

emptblこれは給与を下降順序でランク付けし、目的のランクで行のフィルターを使用します。 RANK()

null値処理:
<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が最初に注文された場合()、最低ランクを受け取ります。最後に注文した場合()、最高ランクを受け取ります

実例:ORDER BYORDER 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>
ログイン後にコピー
および

nullが異なる方法で連続してランキングを示します。 出力テーブルは、異なるランキング動作を視覚的に表します。 (注:この例は、提供されたデータに名前が付けられたテーブルが存在すると想定しています。実際のテーブル名に置き換えます。)

以上がOracle SQLのrank()とdense_rank()の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート