Heim >Datenbank >MySQL-Tutorial >Wie führe ich ein gruppiertes Ranking in MySQL mithilfe von Unterabfragen und Variablen durch?
Als Datenbankadministrator müssen Sie möglicherweise Elemente in einem gruppierten Datensatz einordnen. MySQL bietet eine bequeme Möglichkeit, eine gruppierte Rangfolge mithilfe einer Kombination aus Unterabfragen und temporären Variablen durchzuführen.
Betrachten Sie das folgende Formular:
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 |
Das Ziel besteht darin, die Schüler innerhalb jeder Klasse einzustufen, was zu folgendem Ergebnis führt:
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 |
Um ein Gruppenranking in MySQL durchzuführen, können Sie die folgende Abfrage verwenden:
<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>
Diese Abfrage erfolgt Schritt für Schritt:
id_class
und dann nach grade
in absteigender Reihenfolge. @student
und @class
werden auf -1 initialisiert. @class
wird verwendet, um zu bestimmen, ob einer neuen Gruppe beigetreten werden soll. Wenn der vorherige Wert von @class
, der in id_class
gespeichert ist, vom aktuellen id_class
abweicht, wird @student
auf 0 zurückgesetzt. Andernfalls wird es inkrementiert. @class
wird der neue Wert id_class
zugewiesen und für die nächste Iteration der Abfrage verwendet. rn
als Rangfolge innerhalb jeder Gruppe berechnet. Beachten Sie, dass die innere Abfrage nach id_class
und grade
in absteigender Reihenfolge sortiert werden muss, um eine korrekte Rangfolge sicherzustellen. Diese modifizierte Abfrage zeigt deutlicher, wie Variablen zum Erreichen einer Gruppenrangfolge verwendet werden, und korrigiert einige logische Fehler in der ursprünglichen Abfrage, um die Genauigkeit der Rangfolgeergebnisse sicherzustellen. Der Schlüssel liegt in der bedingten Beurteilung der CASE WHEN
-Anweisung und der korrekten Aktualisierung der Variablen @student
und @class
.
Das obige ist der detaillierte Inhalt vonWie führe ich ein gruppiertes Ranking in MySQL mithilfe von Unterabfragen und Variablen durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!