Heim > Datenbank > MySQL-Tutorial > Wie kann ich mithilfe von Fensterfunktionen die obersten N Zeilen für jede Gruppe in SQL abrufen?

Wie kann ich mithilfe von Fensterfunktionen die obersten N Zeilen für jede Gruppe in SQL abrufen?

Susan Sarandon
Freigeben: 2025-01-25 11:51:37
Original
671 Leute haben es durchsucht

How Can I Retrieve the Top N Rows for Each Group in SQL Using Window Functions?

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

  • : Ähnlich wie
  • , aber das Ranking desselben Wertes ist kontinuierlich und es gibt keine Lücke. Beispielsweise beträgt der

    -Warge von 1 bis 5 (auch wenn einige Werte wiederholt werden). DENSE_RANK RANK catid Wählen Sie die rechte Fensterfunktion: p01 dense_rank

    Welche Fensterfunktion hängt von Ihren spezifischen Anforderungen und der Definition von "Front -N -Zeilen" ab. Wenn Sie die einzige Rangliste in jeder Zeile benötigen, verwenden Sie
  • , wenn Sie die gleichen Ranglisten zulassen, verwenden Sie
.

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!

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