SQL RANK() と ROW_NUMBER(): 違いの詳細な説明
SQL では、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 サイトの他の関連記事を参照してください。