MySQL : Sélection des N premières valeurs maximales
Une confusion survient souvent lorsque l'on tente de récupérer les N premières lignes avec les valeurs les plus élevées dans un domaine spécifique colonne. La question est de savoir s'il faut renvoyer uniquement les N premières lignes ou inclure des lignes supplémentaires si elles partagent la même valeur maximale.
Pour obtenir la première solution, la requête suivante suffira :
SELECT * FROM t ORDER BY value DESC LIMIT N
Ceci La requête garantit que seules les N premières lignes sont renvoyées, que les autres lignes aient ou non la même valeur maximale.
Cependant, si l'exigence est d'inclure des lignes avec des valeurs maximales égales, une requête plus complexe est requise :
SELECT * FROM t JOIN ( SELECT MIN(value) AS cutoff FROM ( SELECT value FROM t ORDER BY value LIMIT N ) tlim ) tlim ON t.value >= tlim.cutoff;
Alternativement, la requête peut être simplifiée :
SELECT * FROM t JOIN ( SELECT value FROM t ORDER BY value LIMIT N ) tlim ON t.value = tlim.value;
Enfin, une autre méthode consiste à utiliser la fonction ANY, mais sa compatibilité avec MySQL peut varier :
SELECT * FROM t WHERE t.value >= ANY ( SELECT value FROM t ORDER BY value LIMIT N )
Cette approche inclut également des lignes avec la même valeur maximale, offrant une solution conceptuellement claire au problème.
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!