ホームページ  >  記事  >  データベース  >  MySQLでグループごとに行に番号を付ける方法は?

MySQLでグループごとに行に番号を付ける方法は?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-11 21:52:03363ブラウズ

How to Number Rows by Group in MySQL?

MySQL でのグループごとの行の番号付け

次のテーブル構造を考えてみましょう。

id crew_id amount type
1 4 1000 AUB
2 4 1500 AUB
3 5 8000 CA
4 4 1000 CA
5 5 1000 AUB
6 6 3000 AUB
7 4 2000 CA
8 6 3500 AUB
9 4 5000 AUB
10 5 9000 CA
11 5 1000 CA

結果セットを生成するにはcrew_id と type の組み合わせごとに行番号が含まれる場合は、次のコマンドを実行します。クエリ:

SELECT    id,
              crew_id,
              amount,
              type,
             ( 
                CASE type 
                WHEN @curType 
                THEN @curRow := @curRow + 1 
                ELSE @curRow := 1 AND @curType := type END
              ) + 1 AS rank
    FROM      Table1 p,
              (SELECT @curRow := 0, @curType := '') r
   ORDER BY  crew_id,type asc;

説明:

  • クエリは、最初に 2 つのユーザー変数 @curRow と @curType を初期化し、現在の行番号とtype の現在の値。
  • メイン クエリでは、CASE ステートメントは type の現在の値が一致するかどうかを確認します。以前に @curType に保存された値。一致する場合、@curRow を 1 だけインクリメントします。一致しない場合は、@curRow を 1 にリセットし、@curType を新しい値で更新します。
  • 式 (@curRow := @curRow 1) 1 は、インクリメントされたまたは@curRow の値を 1 だけリセットして、行番号を生成します。
  • クエリは、crew_id とタイプによって順序付けされ、適切にグループ化され、番号が付けられます。行。

出力:

id crew_id amount type row_number
1 4 1000 AUB 1
2 4 1500 AUB 2
9 4 5000 AUB 3
4 4 1000 CA 1
7 4 2000 CA 2
5 5 1000 AUB 1
3 5 8000 CA 1
10 5 9000 CA 2
11 5 1000 CA 3
6 6 3000 AUB 1
6 6 3000 AUB 2

以上がMySQLでグループごとに行に番号を付ける方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。