Heim >Datenbank >MySQL-Tutorial >Wie führe ich gruppierte Ranking-Abfragen in MySQL durch?

Wie führe ich gruppierte Ranking-Abfragen in MySQL durch?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-17 19:32:11591Durchsuche

How to Perform Grouped Ranking Queries in MySQL?

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:

  1. 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.

  2. 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.

  3. 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.

  4. Klassengruppe aktualisieren: Die Variable @class wird mit dem aktuellen Wert id_class aktualisiert, um den Überblick über die aktive Gruppe zu behalten.

  5. 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn