MySQL行番号ウィンドウ関数

Mysql Row Number Window Function



MySQL内では、ROW NUMBER()メソッドには、パーティション内のすべての行の時系列の番号が含まれています。これは、ある種のウィンドウ機能にすぎません。行の図は、パーティション内の行の図で1から始まります。バージョン8.0より前では、MySQLはROW NUMBER()関数を許可していませんが、この機能を模倣するのに役立つセッション変数を提供していることを忘れないでください。このガイド全体でMySQLROW NUMBER()機能について詳しく理解し、結果コレクションのすべての行に連続した番号を生成します。 MySQLでは、ROW_NUMBER()メソッドは後続の句のいずれかで使用されます。

  • Over()句はその中で使用されます。
  • ORDERS BY句は、上記の列のソート順に従って結果を配置します。

構文:

>> 選択する col_nameROW_NUMBER(()。以上(( パーティション BY col_name 注文者 col_name)。 なので row_num から table_name;

アプリケーションからMySQLコマンドラインクライアントシェルを開き、パスワードを入力してログインしましょう。









行番号関数の作業を開始するには、新しいテーブルを作成するか、デフォルトのテーブルを使用する必要があります。次の画像に示すように、スキーマデータにはテーブル動物があり、いくつかのレコードが含まれています。 SELECT命令を使用してレコードをフェッチしましょう。



>> 選択する * から データ .animals;





例01:ORDER BY句を使用したROW_NUMBER()

同じ表を使用して、行番号関数のいくつかの例を詳しく説明します。 ORDER BY句のみを使用しながら、ROW_NUMBER()関数の後にOver()が続く例を取り上げています。価格順の列に従って行に番号を付けながら、すべてのレコードをフェッチしています。行の番号を格納する列にrow_numという名前を付けました。以下のコマンドを試してみましょう。

>> 選択する *ROW_NUMBER(()。以上(( 注文者 価格)。 なので row_num から データ .animals;

上記のクエリを実行すると、Price列の並べ替え順序に従って行に番号が割り当てられていることがわかります。あなたはいくつかのより小さな価格が列の一番上にあるべきであり、それに従ってソートされるべきだと思うかもしれません。ただし、ORDER BY句は、値を並べ替えるために列の最初の桁またはアルファベットのみを参照します。



Age列の並べ替え順序を使用しながら、同じクエリに続いてORDERBY句を実行してみましょう。出力は、Age列に従って表示されます。

>> 選択する *ROW_NUMBER(()。以上(( 注文者)。 なので row_num から データ .animals;

例02:PARTITION BY句を使用したROW_NUMBER()

結果を確認するために、ROW_NUMBER()クエリで唯一のPARTITIONBY句を使用します。 SELECTクエリを使用してレコードをフェッチし、続いてROW_NUMBER()およびOVER句を使用して、列Colorに従ってテーブルを分割しました。コマンドシェルで以下のコマンドを実行します。

>> 選択する *ROW_NUMBER(()。以上(( パーティション 色別)。 なので row_num から データ .animals;

結果では、色の並べ替え順序に従って、行の番号がパーティションに割り当てられていることがわかります。黒の色には4つの値があり、4行かかります。そのため、1から4まで、またはその逆の4行の番号があります。

今回はGender列で分割した同じ例を試してください。ご存知のとおり、この表には性別が2つしかないため、2つのパーティションが形成されます。女性は9行を占めるため、行番号は1から9になります。男性には8つの値がありますが、1から8になっているのはそのためです。

>> 選択する *ROW_NUMBER(()。以上(( パーティション 性別)。 なので row_num から データ .animals;

例03:PARTITIONBYとORDERBYを使用したROW_NUMBER()

MySQLコマンドラインで上記の2つの例を実行しました。次に、MySQL Workbench 8.0でROW_NUMBER()の例を実行します。したがって、アプリケーションからMySQL Workbench8.0を開きます。 MySQL Workbenchをローカルホストルートデータベースに接続して、作業を開始します。

MySQL Workbenchの左側に、スキーマバーがあり、ナビゲーターをブローします。このスキーマバーには、データベースのリストがあります。次の画像に示すように、データベースリストの下には、さまざまなテーブルとストアドプロシージャがあります。データベースの「データ」にはさまざまなテーブルがあります。クエリ領域でSELECTコマンドを使用してテーブル「order1」を開き、ROW_NUMBER()関数の実装に使用を開始します。

>> 選択する * から データ .order1;

以下に示すように、テーブルorder1がグリッドビューに表示されています。 id、Region、Status、OrderNoの4つの列フィールドがあることがわかります。 ORDERBY句とPARTITIONBY句を同時に使用しながら、このテーブルのすべてのレコードをフェッチします。

MySQL Workbench 8.0のクエリ領域に、以下に表示されているクエリを入力します。クエリはSELECT句で開始され、すべてのレコードをフェッチした後、OVER句とともにROW_NUMBER()関数が続きます。 OVER句の後に、PARTITION BYステートメントによって続行される列Statusを指定して、このテーブルに従ってテーブルをパーティションに分割します。 ORDER BY句は、Region列に従ってテーブルを降順で配置するために使用されます。行番号はrow_num列に保持されます。フラッシュアイコンをタップして、このコマンドを実行します。

以下の結果が表示されます。まず、テーブルは、ステータス列の値に従って2つの部分に分離されています。その後、「地域」列の降順で表示され、パーティションには行番号が割り当てられています。

結論:

最後に、MySQL WorkbenchおよびMySQLコマンドラインクライアントシェルでROW_NUMBER()関数を使用するために必要なすべての例を完了しました。