Maison >base de données >tutoriel mysql >Comment sélectionner les N premières lignes par groupe classées par une colonne spécifique dans PostgreSQL ?

Comment sélectionner les N premières lignes par groupe classées par une colonne spécifique dans PostgreSQL ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-15 11:19:45207parcourir

How to Select the Top N Rows per Group Ordered by a Specific Column in PostgreSQL?

Restriction de groupe dans PostgreSQL : sélectionnez les N premières lignes de chaque groupe triées par colonne personnalisée

Afin de récupérer les N premières lignes de chaque groupe en fonction d'un ordre de colonnes personnalisé, PostgreSQL fournit une solution aux utilisateurs (en particulier ceux qui utilisent PostgreSQL 8.4 et supérieur).

Considérez l'exemple de tableau contenant les colonnes 'id', 'section_id' et '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

Sur la base des données fournies, le résultat souhaité est de sélectionner les deux premières lignes (triées par « nom ») pour chaque « section_id ».

Solutions pour PostgreSQL 8.4 et supérieur

<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 solution avancée utilise la fonction « ROW_NUMBER() » avec les clauses « PARTITION BY » et « ORDER BY » pour obtenir l'ensemble de résultats souhaité. Chaque ligne de la table « xxx » se voit attribuer un rang au sein de son groupe « section_id » respectif, avec des lignes triées par « nom ». Par une sélection ultérieure basée sur la condition « x.r <= 2 », nous limitons effectivement le nombre de lignes renvoyées dans chaque groupe.

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!

Déclaration:
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