ホームページ > データベース > mysql チュートリアル > SQL RANK() と ROW_NUMBER(): 同順位を処理する場合の違いは何ですか?

SQL RANK() と ROW_NUMBER(): 同順位を処理する場合の違いは何ですか?

Susan Sarandon
リリース: 2025-01-13 16:56:43
オリジナル
895 人が閲覧しました

SQL RANK() vs. ROW_NUMBER(): How Do They Differ When Handling Ties?

SQL RANK() と ROW_NUMBER(): 違いの詳細な説明

SQL では、RANK() と ROW_NUMBER() は同様の機能を持ち、混同されやすいです。ただし、効果的なデータ操作には、それらの微妙な違いを理解することが重要です。

RANK() と ROW_NUMBER() の比較

RANK() は、パーティション内の同じ並べ替え値を持つ行と列に同じランクを割り当てますが、ROW_NUMBER() は、同じ値を持つ行と列であっても常に増分します。

主な違い: 重複値の処理

RANK() と ROW_NUMBER() の主な違いは、パーティション内で重複値が見つかったときの動作です。

  • RANK(): 重複した値を持つ行に同じランクを割り当てます。
  • ROW_NUMBER(): 重複する値を持つ行に、増加するランクを任意に割り当てます。

次の形式を考えてみましょう:

StyleID ID Description
1 1 Item A
1 1 Item B
1 1 Item C
1 2 Item D

次のクエリを使用します:

<code class="language-sql">SELECT ID, Description, RANK() OVER (PARTITION BY StyleID ORDER BY ID) AS 'Rank' FROM SubStyle;
SELECT ID, Description, ROW_NUMBER() OVER (PARTITION BY StyleID ORDER BY ID) AS 'RowNumber' FROM SubStyle;</code>
ログイン後にコピー

パーティション内に重複する値がない場合にのみ、同じ結果が得られます。たとえば、StyleID 3 と ID 1 の別の行を追加すると、次のようになります:

StyleID ID Description Rank RowNumber
1 1 Item A 1 1
1 1 Item B 1 2
1 1 Item C 1 3
1 2 Item D 4 4
3 1 New Item 1 5

ご覧のとおり、StyleID が 3 の一意の値の場合、ROW_NUMBER() は増加する数値を割り当てますが、RANK() は StyleID の重複値が 1 である行と同じランクを割り当てます。

結論

RANK() と ROW_NUMBER() は異なる目的を果たします。 RANK() は、グループ内の一意の値をランク付けするために使用され、重複する値を適切に処理します。一方、 ROW_NUMBER() は常にインクリメントし、重複した値を持つ行であっても、各行が個別の数値を持つようにします。これらの違いを理解することは、SQL データを操作する際に情報に基づいた意思決定を行うために重要です。

以上がSQL RANK() と ROW_NUMBER(): 同順位を処理する場合の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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