logo

SQLサーバーの行番号

行番号が最も一般的です ランキング機能 SQL Server で使用されます。 ROW_NUMBER() 関数 パーティション内の各行に連続番号を生成します 結果の出力で。各パーティションの最初の行番号は 1 から始まります。常に 注文方法 句を使用して、番号が適切な順序で割り当てられていることを確認します。この関数によって返される値は次のとおりです。 ビッグINT データ・タイプ。この機能は、SQL Server 2005 以降の MS SQL バージョンに付属しています。

ROW_NUMBER によって決定されます。 一時的な値 クエリが実行されるとき。表内の数値を取得したい場合は、 身元 財産と 順序 。 SQL Server の ROW_NUMBER 関数は、同じパーティション内で 2 つの同一の値を検出すると、それらに異なるランク番号を割り当てます。ランク番号は表示順に決定されます。

以下に該当しない限り、この関数によって返される値が実行ごとに同じ順序になるという保証はありません。

  • パーティション化された列の値は一意です
  • ORDER BY 列の値は一意です
  • Partition 列と Order By 列の組み合わせは一意です

構文

ROW_NUMBER() 関数を示す構文は次のとおりです。

 ROW_NUMBER() OVER ( [PARTITION BY partition_expression, ... ] ORDER BY sort_expression [ASC | DESC], ... ) 

ROW NUMBER() 関数の構文を理解しましょう。

Javaブール値

以上

ウィンドウ関数が操作するウィンドウまたは行のセットを指定するこの句を理解することが重要です。 PARTITION BY と ORDER BY は、OVER 句で使用できる 2 つの句です。 OVER 句の ORDER BY 式は、関数を実行するために行を特定の順序で入力する必要がある場合にサポートされます。

パーティション分割

  • これは、結果セットをパーティション (行のグループ) に分割するオプションの句です。次に、ROW NUMBER() 関数が各パーティションに適用され、各パーティションのランク番号が個別に割り当てられます。
  • Partition by 句を省略した場合、ROW_NUMBER 関数は結果全体を 1 つのパーティションとして扱い、上から下の順序でランキングを提供します。

注文方法

この句を使用すると、各パーティション内の結果セットの行を並べ替えることができます。 ROW_NUMBER() 関数は順序に依存するため、これは必須の句です。

例を使用して、SQL Server テーブルで ROW_NUMBER 関数がどのように機能するかを理解しましょう。まず、「」という名前のテーブルを作成します。 ' 以下のステートメントを使用します。

 CREATE TABLE Persons ( person_name varchar(45) NOT NULL, product varchar(45) DEFAULT NULL, country varchar(25) DEFAULT NULL, price float, years int NOT NULL ); 

次に、以下のステートメントを使用して、このテーブルにいくつかのレコードを追加します。

 INSERT INTO Persons (person_name, product, country, price, years) VALUES ('Steffen', 'Computer', 'USA', 20000.00, 2018), ('Joseph', 'Laptop', 'India', 35000.00, 2016), ('Kevin', 'TV', 'USA', 15000.00, 2016), ('Thompson', 'Mobile', 'France', 12500.00, 2017), ('Donald', 'Laptop', 'England', 30000.00, 2018), ('Joseph', 'Mobile', 'India', 18000.00, 2018), ('Matthew', 'Desktop', 'France', 22000.00, 2017), ('Antonio', 'Mouse', 'England', 1200.00, 2016); 

次に、次のコマンドを使用してデータを検証します。 選択する 声明。以下の出力が得られます。

SQLサーバーの行番号

1. 単純な ROW_NUMBER() の例

次の声明 個人の詳細を表示し、連続した整数を追加します ROW_NUMBER() を使用して各行に追加します。

typescript の日付型
 SELECT *, ROW_NUMBER() OVER (ORDER BY price) AS row_num FROM Persons; 

ここでは、ROW_NUMBER() 関数が結果セット全体を単一のパーティションとして扱うように、PARTITION BY 句を指定していません。ステートメントを実行すると、次の出力が得られます。

SQLサーバーの行番号

2. パーティションに対する ROW_NUMBER() の例

この例では ROW NUMBER() 関数が使用されており、テーブル内のパーティション内の各レコードに連続番号を提供します。年が変わると常に行番号が再初期化されます。

 SELECT person_name, product, price, years, ROW_NUMBER() OVER ( PARTITION BY years ORDER BY price) AS row_num FROM Persons; 

ここでは、PARTITION BY 句を使用して、 '人' に基づいてテーブルをパーティションに分割する 「年」 カラム。実行後、以下の出力が得られます。

SQLサーバーの行番号

3. ROW_NUMBER() ページネーションの例

ROW_NUMBER() 関数をページネーションに使用することもできます。 例えば アプリケーション内のすべての個人情報をページ単位で取得したい場合は、まず ROW_NUMBER() 関数を使用して各行に連続番号を割り当てます。次に、要求されたページごとに行を並べ替えます。

次のステートメントはそれをより明確に説明しています。

 SELECT * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY price) AS row_num, person_name, product, price FROM Persons) P WHERE row_num &gt; 3 AND row_num <= 6; < pre> <p>It will give the following output:</p> <img src="//techcodeview.com/img/sql-server-tutorials/96/sql-server-row-number-4.webp" alt="SQL Server Row Number"> <p>If we do not want to use the <strong>subquery</strong> , we can use the <strong>common table expression (CTE)</strong> as below statement:</p> <pre> WITH CTE_Person AS ( SELECT ROW_NUMBER() OVER (ORDER BY price) AS row_num, person_name, product, price FROM Persons) SELECT * FROM CTE_Person WHERE row_num &gt; 3 AND row_num <= 6; < pre> <p>In this example, we have first specified the CTE that uses the ROW_NUMBER() function to assign each row in the result set sequentially. Second, the outer query returned the desired result. After execution, we will get the following output:</p> <img src="//techcodeview.com/img/sql-server-tutorials/96/sql-server-row-number-5.webp" alt="SQL Server Row Number"> <h3>Conclusion</h3> <p>In this article, we learned how to give a sequential number to each record within a partition of a query using the ROW NUMBER() function in SQL Server.</p> <hr></=></pre></=>