MySQL の ROW_NUMBER() 関数は、 連番 パーティション内の各行に対して。窓関数の一種です。行番号は 1 から始まり、パーティション内に存在する行数までとなります。
MySQL はバージョン 8.0 より前の ROW_NUMBER() 関数をサポートしていないことに注意してください。 セッション変数 これにより、この関数をエミュレートできるようになります。
構文
以下は、ROW_NUMBER() を使用するための基本的な構文です。 MySQL :
配列リストとリンクリスト
ROW_NUMBER() OVER ( )
例を使ってそれを示してみましょう 。
地図Java
まず、「」という名前のテーブルを作成します。 人 ' 以下のステートメントを使用します。
CREATE TABLE Person ( Name varchar(45) NOT NULL, Product varchar(45) DEFAULT NULL, Country varchar(25) DEFAULT NULL, Year int NOT NULL );
次に、このテーブルに値を追加する必要があります。以下のステートメントを実行します。
INSERT INTO Person(Name, Product, Country, Year) VALUES ('Stephen', 'Computer', 'USA', 2015), ('Joseph', 'Laptop', 'India', 2016), ('John', 'TV', 'USA', 2016), ('Donald', 'Laptop', 'England', 2015), ('Joseph', 'Mobile', 'India', 2015), ('Peter', 'Mouse', 'England', 2016);
次に、SELECT ステートメントを実行してレコードを表示します。
mysql> SELECT * FROM Person;
以下に示すような出力が得られます。
ここで、次のステートメントを使用して ROW_NUMBER() 関数を使用して各レコードにシーケンス番号を割り当てることができます。
SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person;
次の出力が得られます。
ここでも、次のステートメントを使用して ROW_NUMBER() 関数を使用してパーティション内の各レコードにシーケンス番号を割り当てることができます。
ゼナート・アマン俳優
SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person;
以下のような出力が得られ、年 (2015 年と 2016 年) に基づいて 2 つのパーティションが見つかります。
配列リスト
MySQL ROW_NUMBER() セッション変数の使用
ROW_NUMBER() 関数をエミュレートして、セッション変数を使用して行番号を昇順に追加できます。
以下のステートメントを実行して、各行に 1 から始まる行番号を加算します。
SET @row_number = 0; SELECT Name, Product, Year, Country, (@row_number:=@row_number + 1) AS row_num FROM Person ORDER BY Country;
このステートメントでは、最初にセッション変数を指定します。 @行番号 @prfix で示され、その値を 0 に設定します。次に、テーブル Person からデータを選択し、変数 @row_number の値を行ごとに 1 ずつ増やします。
クエリが正常に実行されると、次のような出力が得られます。
ここでも、セッション変数をテーブルとして使用し、次のステートメントを使用してソース テーブルとクロス結合します。
SELECT (@row_number:=@row_number + 1) AS row_num, Name, Country, Year FROM Person, (SELECT @row_number:=0) AS temp ORDER BY Year;
以下のような出力が得られます。