Heim >Datenbank >MySQL-Tutorial >Wie ordne ich Daten innerhalb von Gruppen in MySQL?
Detaillierte Erläuterung des MySQL-Gruppenrankings
In einigen Szenarien müssen Daten anhand von Gruppierungen eingestuft werden, anstatt sich ausschließlich auf ein einzelnes Feld zu verlassen. Angenommen, es gibt eine Schülertabelle mit der Schüler-ID, der Klassen-ID und den Noten wie folgt:
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 |
Um Schüler in jeder Klasse anhand ihrer Noten einzustufen, kann die folgende MySQL-Abfrage verwendet werden:
<code class="language-sql">SELECT id_student, id_class, grade, @student:=CASE WHEN @class = id_class THEN @student+1 ELSE 1 END AS rn, @class:=id_class AS clset FROM (SELECT @student:= 0) s, (SELECT @class:= 0) c, (SELECT * FROM mytable ORDER BY id_class, grade DESC, id_student ) t</code>
Diese Abfrage enthält die folgenden Schritte:
Variableninitialisierung: Die beiden Benutzervariablen @student
und @class
werden auf 0 initialisiert.
Zeilenweise Verarbeitung: Die äußere Abfrage verarbeitet jede Zeile der Ergebnismenge in der durch die ORDER BY
-Klausel angegebenen Reihenfolge (id_class
, grade DESC
, id_student
). Beachten Sie, dass hier bei der Sortierung grade DESC
verwendet wird, um sicherzustellen, dass Schüler mit hohen Punktzahlen an erster Stelle stehen.
In-Group-Ranking: Die CASE
-Anweisung prüft, ob das aktuelle id_class
mit dem vorherigen id_class
(@class
) identisch ist. Wenn sie gleich sind, addieren Sie 1 zu @student
; andernfalls setzen Sie @student
auf 1 zurück. Dadurch wird sichergestellt, dass der rn
-Wert (Rang) innerhalb jeder Gruppe (id_class
) eindeutig ist.
Gruppierte Zuordnung: @class
wird dem aktuellen id_class
zugewiesen und in der nächsten Zeile verglichen.
Die Ausgabe dieser Abfrage liefert die gewünschten Gruppierungsrankings der Schüler:
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 |
Das obige ist der detaillierte Inhalt vonWie ordne ich Daten innerhalb von Gruppen in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!