Maison  >  Article  >  base de données  >  Comment identifier efficacement les N premières valeurs maximales dans MySQL ?

Comment identifier efficacement les N premières valeurs maximales dans MySQL ?

DDD
DDDoriginal
2024-11-12 05:40:01830parcourir

How to Efficiently Identify the Top N Maximum Values in MySQL?

Identification des N premières valeurs maximales dans MySQL

Dans de nombreux scénarios, interrogation des N premières lignes avec les valeurs les plus élevées dans une colonne spécifique est crucial. Cependant, il peut y avoir une confusion quant à la façon de gérer les cas où plusieurs lignes partagent la même valeur maximale et s'il faut inclure toutes les lignes avec la même valeur ou uniquement le N supérieur.

Pour résoudre ce problème, vous pouvez utiliser l'option méthodes suivantes :

Option 1 : Exact Top N

À l'aide de la clause LIMIT, vous pouvez récupérer les N premières lignes exactes dans ordre décroissant par valeur, en excluant toutes les lignes ayant la même valeur :

SELECT *
FROM t
ORDER BY value DESC
LIMIT N

Option 2 : Top N inclus

Si vous souhaitez inclure toutes les lignes avec la même valeur valeur maximale, même s'il y a plus de N lignes avec cette valeur, vous pouvez utiliser l'approche suivante :

Rejoignez la table avec une sous-requête qui trouve la valeur seuil minimale pour le top N :

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, vous pouvez utiliser une version simplifiée :

SELECT *
FROM t
JOIN (
  SELECT value
  FROM t
  ORDER BY value
  LIMIT N
) tlim ON t.value = tlim.value

Alternative conceptuelle (facultatif)

Bien que la requête suivante capture conceptuellement le comportement souhaité, elle peut ne pas fonctionner dans MySQL :

SELECT *
FROM t
WHERE t.value >= ANY (SELECT value FROM t ORDER BY value LIMIT N)

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