Maison  >  Article  >  base de données  >  Comment simuler le classement dans MySQL pour sélectionner les n valeurs maximales ?

Comment simuler le classement dans MySQL pour sélectionner les n valeurs maximales ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-10 15:40:03759parcourir

How to Simulate Rank in MySQL to Select Top n Maximum Values?

Simulation du classement avec MySQL pour sélectionner les n premières valeurs maximales

La sélection des n premières valeurs maximales d'une table peut être difficile dans MySQL, en particulier lorsque le n souhaité est supérieur au nombre de groupes distincts dans le tableau.

Approximation des n valeurs maximales maximales à l'aide d'une requête d'union

Pour n = 2, nous pouvons approximez le résultat souhaité à l'aide d'une requête d'union :

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 trouve d'abord la valeur maximale de chaque groupe, puis trouve la deuxième valeur maximale de toutes les valeurs qui ne sont pas déjà la valeur maximale d'un groupe.

Utilisation des simulations de classement

Pour tout n, nous pouvons simuler le classement sur la partition en utilisant des techniques décrites ailleurs. Une de ces approches consiste à utiliser une sous-requête qui renvoie la n-ième valeur maximale pour chaque groupe :

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

Dans cette requête, LIMIT 2,1 définit la valeur n sur 2. Remplacez le grouper par la colonne de regroupement name et val avec le nom de la colonne de valeur dans votre scénario spécifique.

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