Heim >Datenbank >MySQL-Tutorial >Wie führe ich ein gruppiertes Ranking in MySQL mithilfe von Unterabfragen und Variablen durch?

Wie führe ich ein gruppiertes Ranking in MySQL mithilfe von Unterabfragen und Variablen durch?

Susan Sarandon
Susan SarandonOriginal
2025-01-17 19:46:09513Durchsuche

How to Perform Grouped Ranking in MySQL Using Subqueries and Variables?

Detaillierte Erläuterung des MySQL-Gruppenrankings

Einführung

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.

Problemszenario

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

Lösung

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>

Erklärung

Diese Abfrage erfolgt Schritt für Schritt:

  1. Die anfängliche Abfrage sortiert zuerst nach id_class und dann nach grade in absteigender Reihenfolge.
  2. Temporäre Variablen @student und @class werden auf -1 initialisiert.
  3. @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.
  4. @class wird der neue Wert id_class zugewiesen und für die nächste Iteration der Abfrage verwendet.
  5. Abschließend wird 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!

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