ホームページ > データベース > mysql チュートリアル > MySQL のグループ内でデータをランク付けするにはどうすればよいですか?

MySQL のグループ内でデータをランク付けするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-17 19:51:10
オリジナル
196 人が閲覧しました

How to Rank Data Within Groups in MySQL?

MySQL グループランキングの詳細説明

一部のシナリオでは、単一フィールドのみに依存するのではなく、グループ化に基づいてデータをランク付けする必要があります。たとえば、次のような学生 ID、クラス ID、成績を含む学生テーブルがあるとします。

ID_STUDENT ID_CLASS GRADE
1 1 90
1 2 80
2 1 99
3 1 80
4 1 70
5 2 78
6 2 90
6 3 50
7 3 90
成績に基づいて各クラスの生徒をランク付けするには、次の MySQL クエリを使用できます:

<code class="language-sql">SELECT id_student, id_class, grade,
   @student:=CASE WHEN @class = id_class THEN @student+1 ELSE 1 END AS rn,
   @class:=id_class AS clset
FROM
  (SELECT @student:= 0) s,
  (SELECT @class:= 0) c,
  (SELECT *
   FROM mytable
   ORDER BY id_class, grade DESC, id_student
  ) t</code>
ログイン後にコピー
このクエリには次のステップが含まれています:

  1. 変数の初期化: 2 つのユーザー変数 @student は 0 に初期化されます。 @class

  2. 行ごとの処理: 外側のクエリは、 句 (ORDER BYid_classgrade DESC) で指定された順序で結果セットの各行を処理します。 ここでの並べ替えには id_student が使用されており、スコアの高い生徒が最初にランク付けされるようになっていることに注意してください。 grade DESC

  3. グループ内ランキング: ステートメントは、現在の CASE が前の id_class (id_class) と同じかどうかをチェックします。同じ場合は @class に 1 を追加し、そうでない場合は @student を 1 にリセットします。これにより、@student 値 (ランク) が各グループ (rn) 内で一意であることが保証されます。 id_class

  4. グループ化された割り当て: には現在の @class が割り当てられ、次の行で比較されます。 id_class

このクエリの出力は、目的の学生グループのランキングを提供します:

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート