Gruppenbeschränkung in PostgreSQL: Wählen Sie die obersten N Zeilen in jeder Gruppe aus, sortiert nach benutzerdefinierter Spalte
Um die obersten N Zeilen in jeder Gruppe basierend auf einer benutzerdefinierten Spaltenreihenfolge abzurufen, bietet PostgreSQL eine Lösung für Benutzer (insbesondere diejenigen, die PostgreSQL 8.4 und höher verwenden).
Betrachten Sie die Beispieltabelle mit den Spalten „id“, „section_id“ und „name“:
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 |
Basierend auf den bereitgestellten Daten besteht die gewünschte Ausgabe darin, die ersten beiden Zeilen (sortiert nach „Name“) für jede „Abschnitts-ID“ auszuwählen.
Lösungen für PostgreSQL 8.4 und höher
<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 erweiterte Lösung nutzt die Funktion „ROW_NUMBER()“ mit den Klauseln „PARTITION BY“ und „ORDER BY“, um die gewünschte Ergebnismenge zu erzielen. Jeder Zeile in der Tabelle „xxx“ wird ein Rang innerhalb ihrer jeweiligen „section_id“-Gruppe zugewiesen, wobei die Zeilen nach „Name“ sortiert sind. Durch die anschließende Auswahl basierend auf der Bedingung „x.r <= 2“ begrenzen wir effektiv die Anzahl der in jeder Gruppe zurückgegebenen Zeilen.
Das obige ist der detaillierte Inhalt vonWie wähle ich die obersten N Zeilen pro Gruppe sortiert nach einer bestimmten Spalte in PostgreSQL aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!