sql >> データベース >  >> RDS >> Mysql

MySQLでグループ化されたランキングを実行する方法

    SELECT id_student, id_class, grade,
       @student:=CASE WHEN @class <> id_class THEN 0 ELSE @student+1 END AS rn,
       @class:=id_class AS clset
    FROM
      (SELECT @student:= -1) s,
      (SELECT @class:= -1) c,
      (SELECT *
       FROM mytable
       ORDER BY id_class, id_student
      ) t
    

    これは非常にわかりやすい方法で機能します:

    1. 最初のクエリはid_classで並べ替えられます まず、id_student 2番目。
    2. @student および@class -1に初期化されます
    3. @class 次のセットが入力されているかどうかをテストするために使用されます。 id_classの以前の値の場合 (これは@classに保存されます )は現在の値(id_classに保存されている)と等しくありません )、@student ゼロになります。それ以外の場合はインクリメントされます。
    4. @class id_classの新しい値が割り当てられます 、次の行のステップ3のテストで使用されます。


    1. SQL Serverデータベースにauto_increment主キーを追加するにはどうすればよいですか?

    2. エラーコード:1215。外部キー制約を追加できません(外部キー)

    3. OracleSequencenextvalは数を前後にジャンプしています

    4. 複数の列のチェック制約