Dans PostgreSQL, vous pouvez utiliser les fonctions de fenêtre et la clause PARTITION BY pour récupérer les N premières lignes de chaque regroupement. Cette technique est particulièrement utile lorsque les lignes de chaque groupe doivent être triées selon une colonne spécifique.
Considérez la forme suivante :
<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>
Pour extraire les deux premières lignes de chaque section_id triées par colonne de nom, vous pouvez utiliser la requête suivante :
<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>
Cette requête utilise la fonction de fenêtre ROW_NUMBER() pour attribuer un numéro de ligne unique à chaque groupe, en commençant par 1. En partitionnant les données par section_id et en triant les lignes par nom au sein de chaque groupe, il attribue des numéros de ligne consécutifs aux enregistrements triés. Enfin, la requête externe filtre les lignes dont le numéro est supérieur à 2, sélectionnant ainsi les deux premières lignes pour chaque section_id.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!