Heim > Datenbank > MySQL-Tutorial > Wie erhalte ich die obersten N Zeilen pro Gruppe in SQL?

Wie erhalte ich die obersten N Zeilen pro Gruppe in SQL?

Linda Hamilton
Freigeben: 2025-01-25 12:07:09
Original
904 Leute haben es durchsucht

How to Get the Top N Rows per Group in SQL?

SQL-Tipp: Holen Sie sich die ersten N Datenzeilen nach Gruppe

In diesem Artikel wird erläutert, wie Sie die ersten N Datenzeilen für jede Gruppe effizient aus einer SQL-Datenbank extrahieren. Um dies zu erreichen, verwenden wir Fensterfunktionen wie ROW_NUMBER(), RANK() und DENSE_RANK(). Diese Funktionen generieren eindeutige Bezeichner innerhalb einer bestimmten Partition und eignen sich ideal für die Gruppierung und Zeilenauswahl.

Verwenden Sie ROW_NUMBER()

Die Funktion

ROW_NUMBER() weist den Zeilen in jeder Partition fortlaufende Seriennummern beginnend bei 1 zu.

<code class="language-sql">SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY rate DESC) AS rn
FROM h
WHERE year BETWEEN 2000 AND 2009</code>
Nach dem Login kopieren

In diesem Beispiel erstellt ROW_NUMBER() eine neue Spalte mit dem Namen „rn“, um den Zeilen in jeder id Gruppe eine Seriennummer zuzuweisen.

Verwenden Sie RANK() und DENSE_RANK()

Die Funktionen RANK() und DENSE_RANK() bieten eine weitere Möglichkeit, Zeilen innerhalb einer Gruppe zu nummerieren. RANK() weist Zeilen mit derselben Sortierung unterschiedliche Werte zu, während DENSE_RANK() aufeinanderfolgende Werte zuweist.

<code class="language-sql">SELECT *, RANK() OVER (PARTITION BY id ORDER BY rate DESC) AS rk,
DENSE_RANK() OVER (PARTITION BY id ORDER BY rate DESC) AS dr
FROM h
WHERE year BETWEEN 2000 AND 2009</code>
Nach dem Login kopieren

RANK() und DENSE_RANK() erstellen die Spalten „rk“ bzw. „dr“, die den Rang und die dichte Rangfolge jeder Zeile innerhalb ihrer id-Gruppierung darstellen.

Kombiniert mit LIMIT oder TOP, um die Ergebnisse einzuschränken

Nachdem Sie jeder Gruppierung eine eindeutige Kennung zugewiesen haben, können Sie den Modifikator LIMIT oder TOP verwenden, um nur die angegebene Anzahl von Zeilen pro Gruppierung abzurufen.

<code class="language-sql">SELECT *
FROM h
WHERE year BETWEEN 2000 AND 2009
ORDER BY id, rate DESC
LIMIT 5</code>
Nach dem Login kopieren

In diesem Beispiel ruft der LIMIT-Modifikator die ersten 5 Zeilen jeder id-Gruppe ab. Sie können die Zahlen nach Bedarf anpassen.

Das obige ist der detaillierte Inhalt vonWie erhalte ich die obersten N Zeilen pro Gruppe in SQL?. 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