Maison >base de données >tutoriel mysql >Comment gérer les valeurs maximales en double lors de la récupération des N premières lignes dans MySQL ?

Comment gérer les valeurs maximales en double lors de la récupération des N premières lignes dans MySQL ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-10 20:25:03879parcourir

How to Handle Duplicate Maximum Values When Retrieving Top N Rows in MySQL?

Sélection des N premières valeurs maximales dans MySQL

Déterminer le comportement correct lors de la récupération des N premières lignes avec les valeurs les plus élevées peut être difficile, en particulier lorsque plusieurs lignes partagent la même valeur maximale. Cet article aborde la question de savoir s'il faut renvoyer uniquement les N premières lignes ou inclure des lignes supplémentaires avec la même valeur.

Pour obtenir les N premières lignes distinctes, la requête suivante peut être utilisée :

select *
from t
order by value desc
limit N;

Cette requête récupère les N premières lignes en fonction de l'ordre décroissant de la colonne de valeurs. Cependant, si plusieurs lignes partagent la Nième valeur maximale, seules les N premières lignes seront renvoyées, à l'exclusion de toutes les lignes avec des valeurs identiques.

Dans les scénarios où il est nécessaire de renvoyer toutes les lignes avec la même valeur maximale, le La requête suivante peut être utilisée :

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;

Alternativement, une version simplifiée de la requête ci-dessus peut être used :

select *
from t join
     (select value
      from t
      order by value
      limit N
    ) tlim
    on t.value = tlim.value;

Ces deux requêtes renvoient non seulement les N premières lignes, mais également toutes les lignes supplémentaires partageant la même valeur maximale.

Bien que la requête suivante obtienne conceptuellement le résultat souhaité, il peut ne pas être compatible avec MySQL en raison de limitations spécifiques à la base de données :

select *
from t
where t.value >= ANY (select value from t order by value limit N)

En comprenant les différentes méthodes disponibles, les développeurs peuvent sélectionner la requête appropriée en fonction de leurs besoins spécifiques lors de la récupération des N premières valeurs maximales dans MySQL.

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