Maison > Article > base de données > Comment récupérer les n valeurs maximales d'une table de base de données ?
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!