Heim >Datenbank >MySQL-Tutorial >Wie rufe ich die obersten N Zeilen pro Gruppe in PostgreSQL ab?
PostgreSQL: Abrufen der obersten N Zeilen für jede Gruppe
PostgreSQL erfordert häufig das Abrufen einer bestimmten Anzahl von Zeilen aus jeder Gruppe innerhalb eines Datensatzes. Dies ist besonders nützlich, wenn Sie mit Rangfolgedaten arbeiten oder die Ergebnisse pro Kategorie einschränken müssen. Beispielsweise möchten Sie möglicherweise die drei besten Produkte aus jeder Abteilung, sortiert nach Umsatz.
Anschauliches Beispiel:
Betrachten Sie eine Tabelle mit dem Namen products
mit der folgenden Struktur und Beispieldaten:
product_id | department_id | product_name | sales |
---|---|---|---|
1 | 1 | Product A | 100 |
2 | 1 | Product B | 150 |
3 | 1 | Product C | 200 |
4 | 1 | Product D | 250 |
5 | 2 | Product E | 50 |
6 | 2 | Product F | 100 |
7 | 3 | Product G | 120 |
8 | 2 | Product H | 180 |
Ziel ist es, aus jedem department_id
die beiden besten Produkte (basierend auf den Verkäufen) abzurufen. Das erwartete Ergebnis wäre:
product_id | department_id | product_name | sales |
---|---|---|---|
4 | 1 | Product D | 250 |
3 | 1 | Product C | 200 |
8 | 2 | Product H | 180 |
6 | 2 | Product F | 100 |
7 | 3 | Product G | 120 |
Lösung mit ROW_NUMBER() (PostgreSQL 8.4 und höher):
PostgreSQL 8.4 und höher bieten die Fensterfunktion ROW_NUMBER()
und bieten so eine effiziente Lösung. Die folgende Abfrage erledigt die Aufgabe:
<code class="language-sql">SELECT product_id, department_id, product_name, sales FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY sales DESC) AS rn, product_id, department_id, product_name, sales FROM products ) ranked_products WHERE rn <= 2;</code>
Diese Abfrage weist jedem Produkt innerhalb seiner Abteilung basierend auf den Verkäufen einen Rang (rn
) zu und filtert dann, um nur diejenigen einzubeziehen, deren Rang kleiner oder gleich 2 ist.
Das obige ist der detaillierte Inhalt vonWie rufe ich die obersten N Zeilen pro Gruppe in PostgreSQL ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!