Maison > Article > base de données > Comment simuler le classement dans MySQL pour sélectionner les n valeurs maximales ?
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!