概要:このチュートリアルでは、ROW_NUMBER()
を使用して各行に連番を割り当てる方法を学習します。クエリ結果セット内。
SQL ROW_NUMBER()関数の概要
ROW_NUMBER()
は、連続した整数をに割り当てるウィンドウ関数です。クエリの結果セットの各行。
次に、ROW_NUMBER()
関数の構文を示します。
この構文では
- 最初に、
PARTITION BY
句は、FROM
句をパーティションに分割します。PARTITION BY
句はオプションです。これを省略すると、結果セット全体が単一のパーティションとして扱われます。 - 次に、
ORDER BY
句で各パーティションの行が並べ替えられます。ROW_NUMBER()
は順序に依存する関数であるため、ORDER BY
句が必要です。 - 最後に、各行の各行はパーティションには、行番号と呼ばれる連続した整数が割り当てられます。行番号は、パーティションの境界を超えるたびにリセットされます。
SQL ROW_NUMBER()の例
employees
およびデモ用のサンプルデータベースのdepartments
テーブル:
A)単純なSQL ROW_NUMBER()の例
次のステートメントは、すべての従業員の名、姓、および給与を検索します。さらに、ROW_NUMBER()
関数を使用して、各行に連続した整数を追加します。
次の図部分的な結果セットを示します:
B )ページネーションにSQL ROW_NUMBER()を使用する
ROW_NUMBER()
関数をページネーションに使用できます。たとえば、アプリケーションのテーブルのすべての従業員をページごとに表示する場合、各ページには10個のレコードがあります。
- まず、
ROW_NUMBER()
関数を使用して、各行に連続した整数を割り当てます。 - 次に、要求されたページで行をフィルタリングします。たとえば、最初のページには1から9までの行があり、2番目のページには11から20までの行があり、以下同様です。
次のステートメントは、のレコードを返します。 2番目のページでは、各ページに10個のレコードがあります。
出力を次に示します。
サブクエリの代わりに共通テーブル式(CTE)を使用する場合は、次のクエリを使用します。
C)SQLROW_NUMBERの使用()グループごとにn番目に高い値を見つけるため
次の例は、部門で給与が最も高い従業員を見つける方法を示しています。
サブクエリ内:
- まず、
PARTITION BY
句で従業員を部門ごとに分散します。 - 次に、
ORDER BY
句は、各部門の従業員を給与の降順で並べ替えます。 - 3番目に、
ROW_NUMBER()
は各行に連続した整数を割り当てます。 。部門が変更されると、番号がリセットされます。
サブクエリの結果セットを次に示します。
外部クエリでは、row_num
を持つ従業員行のみを選択しました。値1。
クエリ全体の出力は次のとおりです。
WHERE
句の述語を1から2、3などに変更すると、次のような従業員が取得されます。 2番目に高い給与、3番目に高い給与などがあります。
このチュートリアルでは、SQL ROW_NUMBER()
関数を使用してシーケンシャルを割り当てる方法を学習しました。クエリの結果セットの各行の整数。
- このチュートリアルは役に立ちましたか?
- はいいいえ