ホームページ >データベース >mysql チュートリアル >MySQL で学生の成績のグループ化されたランキングを実行するにはどうすればよいですか?
MySQL のグループランキング
学生 ID、クラス ID、成績などの学生の成績データを含むテーブルがあるとします。各クラス内で学生をランク付けすることで、学生の学習の進み具合を把握できます。これは、変数、サブクエリ、比較演算子を組み合わせて使用することで実現できます。
次のクエリでは、変数 @student と @class を使用します。
<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) s, (SELECT @class:= -1) c, (SELECT * FROM mytable ORDER BY id_class, grade DESC, id_student ) t</code>
お問い合わせの流れ:
データの並べ替え: 最内サブクエリ (SELECT * FROM mytable ORDER BY id_class, grade DESC, id_student)
最初にクラス ID で並べ替え、次に学年で降順に並べ替え、最後に学生 ID で並べ替えます。これにより、同じクラス内で成績の高い生徒が上位にランク付けされるようになります。
変数の初期化: サブクエリを使用して、変数 @student と @class を -1 に初期化します。
割り当てランク: SELECT
ステートメント内の CASE
ステートメントは、現在のクラス ID が前のクラス ID と同じかどうかを確認します。それらが同じ場合、@student は 1 ずつ増分され、そうでない場合、@student は 0 にリセットされます。これにより、各クラス内でのランキングが決まります。
Update @class: @class 変数には現在のクラス ID が割り当てられます。これは、学生が同じクラスに属しているかどうかを判断するために、CASE
ステートメントの後続の行で使用されます。
このクエリは、変数とサブクエリを使用することで、生徒をそれぞれのクラスに効果的にグループ化し、それに応じてランキングを割り当て、各グループ内の生徒の学習を解釈する有意義な方法を提供します。 このクエリは成績の降順で並べ替えられ、成績の高い生徒が上位にランクされることに注意してください。昇順に並べ替える必要がある場合は、ORDER BY id_class, grade DESC, id_student
を ORDER BY id_class, grade ASC, id_student
に変更してください。
以上がMySQL で学生の成績のグループ化されたランキングを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。