Maison > base de données > tutoriel mysql > Comment récupérer les N premiers enregistrements de chaque groupe dans une base de données ?

Comment récupérer les N premiers enregistrements de chaque groupe dans une base de données ?

Mary-Kate Olsen
Libérer: 2025-01-25 09:46:13
original
416 Les gens l'ont consulté

How to Retrieve the Top N Records for Each Group in a Database?

Une fois la base de données regroupée, obtenez les N premiers enregistrements de chaque groupe

Les données de votre base de données sont organisées en groupes et vous devez extraire les N premiers enregistrements de chaque groupe. Pour ce faire, vous pouvez utiliser les stratégies suivantes :

Méthode UNION ALL :

Utilisez l'opérateur UNION ALL pour combiner les N premiers enregistrements de chaque groupe. Par exemple, si vous avez deux regroupements et que vous souhaitez récupérer les deux premiers enregistrements de chaque regroupement, vous pouvez utiliser :

<code class="language-sql">(
  SELECT *
  FROM mytable
  WHERE `group` = 1
  ORDER BY age DESC
  LIMIT 2
)
UNION ALL
(
  SELECT *
  FROM mytable
  WHERE `group` = 2
  ORDER BY age DESC
  LIMIT 2
)</code>
Copier après la connexion

Méthode du numéro de ligne :

Générez des numéros de ligne pour chaque enregistrement à l'aide de la requête suivante :

<code class="language-sql">SELECT person, `group`, age,
      (@num:=IF(@group = `group`, @num +1, IF(@group := `group`, 1, 1))) row_number
FROM test t
CROSS JOIN (SELECT @num:=0, @group:=NULL) c
ORDER BY `Group`, Age DESC, person</code>
Copier après la connexion

Cette requête attribue un numéro de ligne à chaque enregistrement de son groupe. Vous pouvez ensuite filtrer les résultats pour récupérer uniquement les enregistrements dont les numéros de lignes sont inférieurs ou égaux à N :

<code class="language-sql">SELECT person, `group`, age
FROM
(
   ... (上述查询) ...
) AS x
WHERE x.row_number <= N</code>
Copier après la connexion

Autres méthodes :

L'article xaprb mentionné dans l'article propose d'autres moyens d'obtenir ce résultat, notamment :

  • Utiliser une sous-requête ou une sous-requête corrélée
  • Utiliser des procédures stockées
  • Utiliser les fonctions de fenêtre (pour les bases de données prises en charge)

La meilleure approche dépend de votre système de base de données spécifique et de vos exigences de performances.

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