Maison > base de données > tutoriel mysql > Comment sélectionner les N premières lignes de chaque groupe dans PostgreSQL ?

Comment sélectionner les N premières lignes de chaque groupe dans PostgreSQL ?

Susan Sarandon
Libérer: 2025-01-15 10:46:46
original
535 Les gens l'ont consulté

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

Utilisation du regroupement LIMIT dans PostgreSQL pour sélectionner des lignes au sein d'un groupe

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal