ホームページ >データベース >mysql チュートリアル >MySQL でサブクエリと変数を使用してグループ化されたランキングを実行する方法

MySQL でサブクエリと変数を使用してグループ化されたランキングを実行する方法

Susan Sarandon
Susan Sarandonオリジナル
2025-01-17 19:46:09567ブラウズ

How to Perform Grouped Ranking in MySQL Using Subqueries and Variables?

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

はじめに

データベース管理者は、グループ化されたデータセット内の項目をランク付けする必要がある場合があります。 MySQL は、サブクエリと一時変数の組み合わせを使用して、グループ化されたランキングを実行する便利な方法を提供します。

問題のシナリオ

次の形式を考えてみましょう:

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

目標は、各クラス内で生徒をランク付けすることです。その結果、次のような出力が得られます:

ID_STUDENT ID_CLASS GRADE RANK
2 1 99 1
1 1 90 2
3 1 80 3
4 1 70 4
6 2 90 1
1 2 80 2
5 2 78 3
7 3 90 1
6 3 50 2

解決策

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) s,
  (SELECT *
   FROM mytable
   ORDER BY id_class, grade DESC
  ) t;</code>

説明

このクエリはステップバイステップです:

  1. 最初のクエリは、最初に id_class で並べ替え、次に grade で降順に並べ替えます。
  2. 一時変数 @student@class は -1 に初期化されます。
  3. @class は、新しいグループに参加するかどうかを決定するために使用されます。 @class に格納されている id_class の以前の値が現在の id_class と異なる場合、@student は 0 にリセットされます。それ以外の場合はインクリメントされます。
  4. @class には id_class の新しい値が割り当てられ、クエリの次の反復で使用されます。
  5. 最後に、各グループ内の順位としてrnが計算されます。 正しいランキングを確保するには、内部クエリを id_classgrade で降順に並べ替える必要があることに注意してください。

この変更されたクエリは、変数を使用してグループのランキングを達成する方法をより明確に示し、元のクエリのいくつかの論理エラーを修正してランキング結果の正確性を保証します。 鍵となるのは、CASE WHEN ステートメントの条件判断と、@student 変数と @class 変数の正しい更新です。

以上がMySQL でサブクエリと変数を使用してグループ化されたランキングを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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