Heim >Datenbank >MySQL-Tutorial >Wie führe ich gruppierte Ranking-Abfragen in MySQL durch?
MySQL-Gruppenranking-Abfrage: Vollständiger Leitfaden
Bei der Datenverarbeitung ist es oft notwendig, die Rangfolge jedes Datensatzes innerhalb einer Gruppe zu bestimmen. In MySQL kann diese Funktionalität mithilfe von Fensterfunktionen wie ROW_NUMBER() oder RANK() in Verbindung mit einer Gruppierungsklausel erreicht werden.
Betrachten Sie das folgende Formular:
学生ID (ID_STUDENT) | 班级ID (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 gruppierte Rankings zu erstellen, 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 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>
So funktioniert es:
Zeilen sortieren: Die Unterabfrage in der ORDER BY-Klausel sorgt dafür, dass die Daten zuerst nach id_class
, dann nach grade
in absteigender Reihenfolge und schließlich nach id_student
sortiert werden. Dadurch wird sichergestellt, dass Schüler mit besseren Noten innerhalb derselben Klasse höher eingestuft werden.
Variableninitialisierung: Initialisieren Sie zwei benutzerdefinierte Variablen @student
und @class
mithilfe separater Unterabfragen auf 0. Diese Variablen werden verwendet, um den Rang bzw. die Klassengruppe zu verfolgen.
Gruppierung und Rangfolge: Die Hauptabfrage verwendet einen CASE-Ausdruck, um die Rangfolge innerhalb jeder Gruppe zu bestimmen. Für Zeilen in derselben Gruppe (basierend auf id_class
) wird der Rang erhöht; für eine neue Gruppe wird der Rang auf 1 zurückgesetzt. Der geänderten Variable @student
wird ein Rankingwert zugewiesen.
Klassengruppe aktualisieren: Die Variable @class
wird mit dem aktuellen Wert id_class
aktualisiert, um den Überblick über die aktive Gruppe zu behalten.
Endergebnis: Die Abfrage wählt die relevanten Spalten aus, einschließlich des mithilfe benutzerdefinierter Variablen berechneten Rangs (rn).
Mit dieser gruppierten Rangfolgeabfrage können Sie die Rangfolge von Schülern in verschiedenen Klassen in MySQL effizient ermitteln. Diese Methode kombiniert Unterabfragen, benutzerdefinierte Variablen und bedingte Anweisungen, um die gewünschten Ergebnisse zu erzielen. Beachten Sie, dass sich diese Methode geringfügig vom Originalartikel unterscheidet. Es gibt Probleme mit der Variableninitialisierung und der Inkrementierungslogik des Originalartikels, die leicht zu Rankingfehlern führen können. Diese Methode behebt dieses Problem und stellt die Genauigkeit der Ranking-Ergebnisse sicher.
Das obige ist der detaillierte Inhalt vonWie führe ich gruppierte Ranking-Abfragen in MySQL durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!