Maison > base de données > tutoriel mysql > le corps du texte

Les N principales requêtes SQL doivent-elles inclure des valeurs maximales en double ?

Patricia Arquette
Libérer: 2024-11-14 15:26:02
original
432 Les gens l'ont consulté

Should Top N SQL Queries Include Duplicate Maximum Values?

Recherche des N valeurs les plus élevées dans les tables MySQL

Dans l'analyse des données et le reporting, il est souvent nécessaire de récupérer les principaux enregistrements en fonction des valeurs les plus élevées d’une colonne spécifique. Cependant, une ambiguïté peut survenir lorsque plusieurs enregistrements partagent la même valeur maximale à proximité de la Nième position.

Question :

Lors de l'utilisation de SQL pour sélectionner les N premières lignes avec la valeur la plus élevée valeurs pour une colonne particulière, la requête doit-elle renvoyer uniquement les N premières lignes ou inclure des lignes supplémentaires avec la même valeur maximale ?

Réponse :

La réponse dépend si vous souhaitez inclure ou exclure les valeurs principales en double. Voici deux approches :

Approche 1 : exclure les principales valeurs en double

Pour récupérer uniquement les N premières lignes sans doublons, utilisez la requête suivante :

SELECT *
FROM t
ORDER BY value DESC
LIMIT N
Copier après la connexion

Dans cette requête, la clause LIMIT N limite l'ensemble de résultats aux N premières lignes, en excluant toutes les lignes ayant la même valeur maximale en dessous de la Nième ligne.

Approche 2 : Inclure le haut en double Valeurs

Pour récupérer toutes les lignes avec la valeur la plus élevée, quels que soient les doublons, utilisez la requête suivante :

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;
Copier après la connexion

Cette requête utilise une sous-requête pour déterminer la valeur seuil pour les lignes avec la Nième valeur la plus élevée. Il joint ensuite cette sous-requête à la table principale à l'aide d'une clause ON pour filtrer les lignes dont les valeurs sont supérieures ou égales au seuil.

Considérations supplémentaires :

  • Si plusieurs lignes ont la même valeur maximale et que la Nième ligne n'est pas un doublon, l'approche 1 ne renverra que les N premières lignes.
  • L'approche 2 renverra toujours toutes les lignes avec la Nième valeur la plus élevée, que c'est le résultat de doublons ou non.
  • Les performances de la requête peuvent varier en fonction de la taille de la table et de l'indexation.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal