Heim >Datenbank >MySQL-Tutorial >Wie beschränke ich Zeilen innerhalb jeder Gruppe in PostgreSQL?
In Datenbanken ist es oft notwendig, eine begrenzte Anzahl von Zeilen aus einer bestimmten Gruppierung zu extrahieren. In PostgreSQL kann diese Anforderung mithilfe der LIMIT-Klausel in Verbindung mit Gruppierungsoperationen erfüllt werden.
Das folgende Beispiel zeigt die Notwendigkeit, die ersten beiden Zeilen (sortiert nach der Namensspalte) in jeder section_id-Gruppierung abzurufen. Zum Beispiel aus der angegebenen Tabelle:
<code> id | section_id | name ----+------------+------ 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>
Wir wollen folgende Ergebnisse erzielen:
<code> id | section_id | name ----+------------+------ 1 | 1 | A 2 | 1 | B 5 | 2 | E 6 | 2 | F 7 | 3 | G</code>
In PostgreSQL-Versionen vor 8.4 fehlten integrierte Funktionen, um solche Abfragen effizient zu bearbeiten. In PostgreSQL 8.4 und höher ist jedoch eine neue Lösung aufgetaucht:
<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 Lösung nutzt die Fensterfunktion ROW_NUMBER(), um jeder Zeile innerhalb jeder section_id-Partition eine Sequenznummer zuzuweisen. Die ORDER BY-Klausel gibt die Sortierkriterien (in diesem Fall den Namen) an. Anschließend wird eine LIMIT 2-Bedingung auf die Unterabfrage angewendet, wodurch die Ergebnisse auf die ersten beiden Zeilen jeder Gruppierung (sortiert nach Name) beschränkt werden.
Das obige ist der detaillierte Inhalt vonWie beschränke ich Zeilen innerhalb jeder Gruppe in PostgreSQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!