ホームページ >データベース >mysql チュートリアル >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>
このクエリは次のように機能します:
変数の初期化: サブクエリ (SELECT @student:= -1, @class := -1) AS init_vars
を使用して、ユーザー定義変数 @student
と @class
を -1 に初期化します。
グループ化反復: クエリは、t
と id_class
によって降順に並べ替えられた一時テーブル grade
からデータを選択します。
ランク計算: CASE
ステートメントは、id_class
に保存されている現在の @class
と以前の id_class
に基づいて各生徒のランク (rn) を計算します。 id_class
が変化すると、@student
は 0 にリセットされ、それ以外の場合、@student
はインクリメントされます。
クラス変数 の更新: @class
は、次の反復で id_class
の現在の値に更新されます。
クエリの結果は、各クラスの生徒のリストで、成績によって降順に並べ替えられ、クラス内でのランクによって並べ替えられます。この方法では、グループ化されたランキングが効率的に実行されるため、グループ化されたデータを含む複雑なシナリオで、並べ替えてランク付けされたデータを簡単に取得できます。 ここでの並べ替えの基準は grade
降順であり、並べ替えフィールドと順序は実際のニーズに応じて調整できることに注意してください。
以上がMySQL でグループ化されたランキングを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。