Heim > Datenbank > MySQL-Tutorial > Wie wähle ich die obersten N Zeilen innerhalb jeder Gruppe in PostgreSQL aus?

Wie wähle ich die obersten N Zeilen innerhalb jeder Gruppe in PostgreSQL aus?

Susan Sarandon
Freigeben: 2025-01-15 10:46:46
Original
537 Leute haben es durchsucht

How to Select the Top N Rows within Each Group in PostgreSQL?

Gruppierung LIMIT in PostgreSQL verwenden, um Zeilen innerhalb einer Gruppe auszuwählen

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

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