Verwenden Sie die Fensterfunktion, um die ersten N Zeilen jeder Gruppe abzurufen
In diesem Artikel wird beschrieben, wie Sie SQL-Fensterfunktionen verwenden, um die ersten N Zeilen effizient aus gruppierten Daten zu extrahieren. Dies ist in vielen Datenanalyseszenarien sehr praktisch.
MySQL 8 und höher bieten drei häufig verwendete Fensterfunktionen: ROW_NUMBER
, RANK
und DENSE_RANK
. Diese Funktionen weisen jeder Zeile einen numerischen Wert zu, sodass wir die ersten paar Zeilen in jeder Gruppierung auswählen können.
Beispieldaten:
Angenommen, wir haben den folgenden Datensatz:
pkid | catid | value |
---|---|---|
1 | p01 | 100 |
2 | p01 | 90 |
3 | p01 | 90 |
4 | p01 | 80 |
5 | p01 | 80 |
6 | p01 | 80 |
7 | p01 | 70 |
8 | p01 | 60 |
9 | p01 | 50 |
10 | p01 | 40 |
Vergleich der Ausgabeergebnisse der drei Fensterfunktionen:
pkid | catid | value | row_number | rank | dense_rank |
---|---|---|---|---|---|
1 | p01 | 100 | 1 | 1 | 1 |
2 | p01 | 90 | 2 | 2 | 2 |
3 | p01 | 90 | 3 | 2 | 2 |
4 | p01 | 80 | 4 | 4 | 3 |
5 | p01 | 80 | 5 | 4 | 3 |
6 | p01 | 80 | 6 | 4 | 3 |
7 | p01 | 70 | 7 | 7 | 4 |
8 | p01 | 60 | 8 | 8 | 5 |
9 | p01 | 50 | 9 | 9 | 6 |
10 | p01 | 40 | 10 | 10 | 7 |
Funktion Beschreibung:
: Für jede Zeile in jeder Gruppe wird eine eindeutige Bestellnummer ab 1 zugewiesen. Zum Beispiel beträgt der ROW_NUMBER
-Wargtwert von in catid
1 bis 5. p01
row_number
: Alle Ranglisten werden für jede Zeile jeder Gruppe zugewiesen, und der gleiche Wert ist der gleiche. Beispielsweise beträgt der -Warge von RANK
1 bis 5 (auch wenn einige Werte wiederholt werden).
catid
p01
rank
-Warge von 1 bis 5 (auch wenn einige Werte wiederholt werden). DENSE_RANK
RANK
catid
Wählen Sie die rechte Fensterfunktion: p01
dense_rank
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von Fensterfunktionen die obersten N Zeilen für jede Gruppe in SQL abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!