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
Aufschlüsselung der Abfrage:
Die in Klammern eingeschlossene Unterabfrage berechnet den Rang der Punktzahl jedes Schülers:
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!