ホームページ >データベース >mysql チュートリアル >MySQL でグループ化されたランキングを実行するにはどうすればよいですか?

MySQL でグループ化されたランキングを実行するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-17 19:41:14348ブラウズ

How to Perform Grouped Ranking in MySQL?

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

データベース管理者は、グループ化されたデータを並べ替えてランク付けする必要があることがよくあります。たとえば、クラスと生徒の情報および成績を含む生徒の成績表をクラスごとにグループ化し、各クラスの生徒の成績をランク付けする必要があります。

MySQL は次の方法でグループのランキングを達成できます:

<code class="language-sql">SELECT id_student, id_class, grade,
   @student:=CASE WHEN @class = id_class THEN @student+1 ELSE 0 END AS rn,
   @class:=id_class AS clset
FROM
  (SELECT @student:= -1, @class := -1) AS init_vars,  -- 初始化变量
  (SELECT *
   FROM mytable
   ORDER BY id_class, grade DESC  -- 按班级和成绩降序排序
  ) AS t</code>

このクエリは次のように機能します:

  1. 変数の初期化: サブクエリ (SELECT @student:= -1, @class := -1) AS init_vars を使用して、ユーザー定義変数 @student@class を -1 に初期化します。

  2. グループ化反復: クエリは、tid_class によって降順に並べ替えられた一時テーブル grade からデータを選択します。

  3. ランク計算: CASE ステートメントは、id_class に保存されている現在の @class と以前の id_class に基づいて各生徒のランク (rn) を計算します。 id_class が変化すると、@student は 0 にリセットされ、それ以外の場合、@student はインクリメントされます。

  4. クラス変数 の更新: @class は、次の反復で id_class の現在の値に更新されます。

クエリの結果は、各クラスの生徒のリストで、成績によって降順に並べ替えられ、クラス内でのランクによって並べ替えられます。この方法では、グループ化されたランキングが効率的に実行されるため、グループ化されたデータを含む複雑なシナリオで、並べ替えてランク付けされたデータを簡単に取得できます。 ここでの並べ替えの基準は grade 降順であり、並べ替えフィールドと順序は実際のニーズに応じて調整できることに注意してください。

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

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