Maison > base de données > tutoriel mysql > Comment limiter les lignes au sein de chaque groupe dans PostgreSQL ?

Comment limiter les lignes au sein de chaque groupe dans PostgreSQL ?

DDD
Libérer: 2025-01-15 12:09:45
original
558 Les gens l'ont consulté

How to Limit Rows Within Each Group in PostgreSQL?

Limite de regroupement PostgreSQL : afficher les N premières lignes de chaque groupe

Il est souvent nécessaire dans les bases de données d'extraire un nombre limité de lignes d'un groupe spécifique. Dans PostgreSQL, cette exigence peut être satisfaite en utilisant la clause LIMIT en conjonction avec des opérations de regroupement.

L'exemple suivant démontre la nécessité de récupérer les deux premières lignes (triées par colonne de nom) dans chaque groupe section_id. Par exemple, à partir du tableau donné :

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

Nous souhaitons atteindre les résultats suivants :

<code> id | section_id | name
----+------------+------
  1 |          1 | A
  2 |          1 | B
  5 |          2 | E
  6 |          2 | F
  7 |          3 | G</code>
Copier après la connexion

Dans les versions de PostgreSQL antérieures à 8.4, il manquait des fonctions intégrées pour gérer efficacement de telles requêtes. Cependant, dans PostgreSQL 8.4 et versions ultérieures, une nouvelle solution a émergé :

<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 solution utilise la fonction de fenêtre ROW_NUMBER() pour attribuer un numéro de séquence à chaque ligne de chaque partition section_id. La clause ORDER BY précise les critères de tri (nom dans ce cas). Une condition LIMIT 2 est ensuite appliquée à la sous-requête, limitant les résultats aux deux premières lignes de chaque regroupement (triés par name ).

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal