Heim >Datenbank >MySQL-Tutorial >Wie ordne ich Daten innerhalb von Gruppen in MySQL?

Wie ordne ich Daten innerhalb von Gruppen in MySQL?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-17 19:51:10156Durchsuche

How to Rank Data Within Groups 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:

  1. Variableninitialisierung: Die beiden Benutzervariablen @student und @class werden auf 0 initialisiert.

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

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

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

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