Heim > Datenbank > MySQL-Tutorial > Wie rufe ich die beiden besten Ergebnisse für jede Gruppe in SQL ab?

Wie rufe ich die beiden besten Ergebnisse für jede Gruppe in SQL ab?

Barbara Streisand
Freigeben: 2025-01-03 05:21:37
Original
834 Leute haben es durchsucht

How to Retrieve the Top Two Scores for Each Group in SQL?

Ermitteln Sie die beiden besten Ergebnisse für einzelne Gruppen in SQL

In einer relationalen Datenbank erfordert das Extrahieren aussagekräftiger Daten aus großen Datensätzen häufig die Gruppierung von Datensätzen auf bestimmte Merkmale. Beim Abrufen von Daten aus gruppierten Mengen ist es üblich, mithilfe von Aggregationsfunktionen die höchsten oder niedrigsten Werte innerhalb jeder Gruppe zu ermitteln. Was aber, wenn Sie die obersten N Zeilen für jede Gruppe auswählen müssen?

Betrachten Sie die folgende Tabelle mit Schülernamen und ihren entsprechenden Punktzahlen:

NAME SCORE
willy 1
willy 2
willy 3
zoe 4
zoe 5
zoe 6

Die Aggregationsfunktion ermöglicht nur die Gruppierung Sie können für jeden Namen die höchste Punktzahl erzielen. Um die beiden besten Ergebnisse für jeden Schüler abzurufen, ist ein anderer Ansatz erforderlich.

Die folgende Abfrage erreicht dies mithilfe einer Unterabfrage, um den Rang der Ergebnisse jedes Schülers innerhalb seiner jeweiligen Gruppen zu verfolgen:

SELECT *
FROM test s
WHERE 
        (
            SELECT COUNT(*) 
            FROM test f
            WHERE f.name = s.name AND 
                  f.score >= s.score
        ) <= 2
Nach dem Login kopieren

Aufschlüsselung der Abfrage:

  • Die äußere Abfrage, SELECT * FROM test s, ruft alle Zeilen aus der Testtabelle ab und gibt ihnen einen Alias ​​als s.
  • Die in Klammern eingeschlossene Unterabfrage berechnet den Rang der Punktzahl jedes Schülers:

    • SELECT COUNT (*) FROM test f: Dieser Teil zählt die Anzahl der Zeilen in der Testtabelle, in denen der Name (f.name) mit dem Namen der aktuellen Zeile übereinstimmt (s.name) und die Punktzahl (f.score) ist größer oder gleich der Punktzahl der aktuellen Zeile (s.score).
  • Die WHERE-Klausel wendet einen Filter an Die äußere Abfrage wählt nur die Zeilen aus, deren Rang (wie durch die Unterabfrage bestimmt) kleiner oder gleich ist 2.

Ausgabe:

Das Ausführen dieser Abfrage gibt die folgenden Ergebnisse zurück:

NAME SCORE
willy 2
willy 3
zoe 5
zoe 6

Diese Abfrage ruft effektiv die beiden obersten ab Punkte für jeden Schüler und bietet so einen umfassenderen Überblick über seine Leistung im Vergleich zur Verwendung einer einfachen MAX()-Aggregation.

Das obige ist der detaillierte Inhalt vonWie rufe ich die beiden besten Ergebnisse für jede Gruppe in SQL ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage