Maison  >  Article  >  base de données  >  Comment récupérer les n valeurs maximales d'une table de base de données ?

Comment récupérer les n valeurs maximales d'une table de base de données ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-10 10:59:02638parcourir

How to Retrieve the Top n Max Values from a Database Table?

Sélection des valeurs maximales les plus élevées d'une table

Dans la gestion de bases de données, il peut être nécessaire de récupérer les n valeurs les plus élevées d'une table. Pour y parvenir, plusieurs approches sont disponibles. Considérons le tableau suivant :

column1  column2
   1       foo
   2       foo
   3       foo
   4       foo
   5       bar
   6       bar
   7       bar
   8       bar

Pour n=2, nous souhaitons obtenir ces résultats :

3    
4    
7    
8    

approximation utilisant le groupe Max

Une première approche consiste à calculer la valeur maximale pour chaque groupe :

SELECT max(column1) FROM table GROUP BY column2

Cependant, cette méthode ne fournit que la valeur supérieure pour chaque groupe. groupe, pas les n premières valeurs.

Solution basée sur l'union

Pour n=2, la requête basée sur l'union suivante peut être utilisée :

SELECT max(column1) m
FROM table t
GROUP BY column2
UNION
SELECT max(column1) m
FROM table t
WHERE column1 NOT IN (SELECT max(column1)
                      WHERE column2 = t.column2)

Cette requête sélectionne les valeurs les plus élevées, puis exclut les doublons en joignant la deuxième requête, qui trouve la valeur la plus élevée suivante, pas encore sélectionné.

Simulation de classement

Pour toute valeur de n, une approche plus générique consiste à simuler la fonction Rank() sur des partitions. Une façon de procéder est la suivante :

SELECT t.*
FROM
   (SELECT grouper,
          (SELECT val
           FROM table li
           WHERE li.grouper = dlo.grouper
           ORDER BY
                 li.grouper, li.val DESC
           LIMIT 2,1) AS mid
   FROM
      (
      SELECT DISTINCT grouper
      FROM table
      ) dlo
   ) lo, table t
WHERE t.grouper = lo.grouper
      AND t.val > lo.mid

Cette requête regroupe les valeurs par colonne souhaitée, puis recherche la valeur la plus élevée suivante pour chaque groupe dans la limite spécifiée (dans ce cas, 2,1 pour n = 2).

En suivant ces approches, vous pouvez sélectionner efficacement les n premières valeurs maximales d'une table donnée, en garantissant que les valeurs en double sont éliminées et que le nombre correct d'enregistrements est renvoyé.

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