Gruppenranking in MySQL
Angenommen, Sie haben eine Tabelle mit Schülerleistungsdaten, einschließlich Schüler-ID, Klassen-ID und Note. Die Rangfolge der Schüler in jeder Klasse kann Aufschluss darüber geben, wie gut sie lernen. Dies kann durch die Verwendung einer Kombination aus Variablen, Unterabfragen und Vergleichsoperatoren erreicht werden.
Die folgende Abfrage verwendet die Variablen @student und @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>
Anfrageablauf:
Datensortierung: Innerste Unterabfrage (SELECT * FROM mytable ORDER BY id_class, grade DESC, id_student)
Zuerst nach Klassen-ID, dann in absteigender Reihenfolge nach Note und schließlich nach Studenten-ID sortieren. Dadurch wird sichergestellt, dass Schüler mit besseren Noten innerhalb derselben Klasse höher eingestuft werden.
Variableninitialisierung: Verwenden Sie Unterabfragen, um die Variablen @student und @class auf -1 zu initialisieren.
Zuweisungsrang: Die SELECT
-Anweisung in der CASE
-Anweisung prüft, ob die aktuelle Klassen-ID mit der vorherigen Klassen-ID übereinstimmt. Wenn sie gleich sind, wird @student um 1 erhöht; andernfalls wird @student auf 0 zurückgesetzt. Dadurch werden Ranglisten innerhalb jeder Klasse erstellt.
@class aktualisieren: Der @class-Variablen wird die aktuelle Klassen-ID zugewiesen. Es wird in nachfolgenden Zeilen in CASE
-Anweisungen verwendet, um festzustellen, ob Schüler derselben Klasse angehören.
Durch die Verwendung von Variablen und Unterabfragen gruppiert diese Abfrage Schüler effektiv in ihre jeweiligen Klassen und weist ihnen entsprechende Rangfolgen zu, was eine sinnvolle Möglichkeit bietet, den Lernerfolg der Schüler innerhalb jeder Gruppe zu interpretieren. Beachten Sie, dass diese Abfrage in absteigender Reihenfolge der Noten sortiert wird, wobei Schüler mit besseren Noten höher eingestuft werden. Wenn Sie in aufsteigender Reihenfolge sortieren müssen, ändern Sie bitte ORDER BY id_class, grade DESC, id_student
in ORDER BY id_class, grade ASC, id_student
.
Das obige ist der detaillierte Inhalt vonWie führt man ein gruppiertes Ranking der Schülerleistungen in MySQL durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!