ホームページ  >  記事  >  データベース  >  MySQL でグループ内の行番号を生成するにはどうすればよいですか?

MySQL でグループ内の行番号を生成するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-11 17:45:02942ブラウズ

How to Generate Row Numbers Within Groups in MySQL?

MySQL のグループ内の行番号

問題:

各グループの行番号を生成する MySQL クエリを作成するcrew_id と type などの 2 つのフィールドに基づくレコードの数。行番号は、crew_id と type の新しい組み合わせごとにリセットする必要があります。

サンプル データ:

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

必要な出力:

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

解決策:

必要な行番号を達成するには、サブクエリと CASE ステートメントの組み合わせを利用できます。

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;

Inこのクエリ:

  • サブクエリ (SELECT @curRow := 0, @curType := '') r は、2 つのユーザー定義変数を初期化します: @curRow を 0 に、@curType を空の文字列に初期化します。
  • 外側の SELECT クエリの CASE ステートメントは、type 列と @curType を比較して、現在の行が同じグループに属しているかどうかを判断します。

    • type が @curType と等しい場合、 @curRow は 1 ずつ増加します。
    • 型が @curType と異なる場合、@curRow は 1 にリセットされ、@curType は現在の型の値に更新されます。
  • 次に、計算された値に 1 が加算されて、行番号が生成されます。
  • 結果セットは、crew_id とタイプによって昇順に並べられます。

以上がMySQL でグループ内の行番号を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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