Heim >Datenbank >MySQL-Tutorial >Wie wähle ich die obersten N Zeilen innerhalb jeder Gruppe in PostgreSQL aus?
In PostgreSQL können Sie Fensterfunktionen und die PARTITION BY-Klausel verwenden, um die ersten N Zeilen jeder Gruppierung abzurufen. Diese Technik ist besonders nützlich, wenn die Zeilen in jeder Gruppierung nach einer bestimmten Spalte sortiert werden müssen.
Betrachten Sie das folgende Formular:
<code class="language-sql">CREATE TABLE xxx ( id SERIAL PRIMARY KEY, section_id INT, name VARCHAR(255) ); INSERT INTO xxx (id, section_id, name) VALUES (1, 1, 'A'), (2, 1, 'B'), (3, 1, 'C'), (4, 1, 'D'), (5, 2, 'E'), (6, 2, 'F'), (7, 3, 'G'), (8, 2, 'H');</code>
Um die ersten beiden Zeilen jeder section_id, sortiert nach der Namensspalte, zu extrahieren, können Sie die folgende Abfrage verwenden:
<code class="language-sql">SELECT * FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY section_id ORDER BY name) AS r, t.* FROM xxx t) x WHERE x.r <= 2;</code>
Diese Abfrage verwendet die Fensterfunktion ROW_NUMBER(), um jeder Gruppierung eine eindeutige Zeilennummer beginnend bei 1 zuzuweisen. Durch die Partitionierung der Daten nach Abschnitts-ID und die Sortierung der Zeilen nach Namen innerhalb jeder Gruppierung werden den sortierten Datensätzen fortlaufende Zeilennummern zugewiesen. Schließlich filtert die äußere Abfrage Zeilen mit Zeilennummern größer als 2 heraus und wählt effektiv die ersten beiden Zeilen für jede section_id aus.
Das obige ist der detaillierte Inhalt vonWie wähle ich die obersten N Zeilen innerhalb jeder Gruppe in PostgreSQL aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!