Maison >base de données >tutoriel mysql >Comment récupérer efficacement la valeur maximale des identifiants identiques dans une table de base de données ?

Comment récupérer efficacement la valeur maximale des identifiants identiques dans une table de base de données ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-06 12:42:40201parcourir

How to Efficiently Retrieve the Maximum Value for Identical IDs in a Database Table?

Requête de valeur maximale pour des identifiants identiques

Dans une table avec plusieurs enregistrements partageant le même identifiant, vous pouvez rencontrer un scénario dans lequel vous devez récupérer la valeur maximale pour chaque ID. Voici une requête pour y parvenir :

Approche de sous-requête :

select cur.id, cur.signal, cur.station, cur.ownerid
from yourtable cur
where not exists (
    select *
    from yourtable high
    where high.id = cur.id and high.signal > cur.signal
)

Cette requête utilise une sous-requête avec une clause "NOT EXISTS" pour exclure toutes les lignes avec une valeur supérieure signal que la ligne actuelle. Ce faisant, il sélectionne la ligne avec le signal maximum pour chaque ID. L'inconvénient potentiel est qu'il peut répertorier plusieurs lignes pour les identifiants avec des valeurs maximales égales.

Approche de jointure externe :

Une approche alternative consiste à utiliser une jointure externe avec un self-join :

select a.id, a.signal, a.station, a.ownerid
from yourtable a
left join yourtable b on a.id = b.id and a.signal < b.signal
where b.id is null

Cette requête utilise une jointure externe pour trouver les lignes sans signaux supérieurs. En appliquant une condition qui vérifie les valeurs nulles dans les lignes jointes, il filtre les lignes avec des signaux inférieurs. Cette approche garantit une seule ligne pour chaque ID avec le signal maximum.

Exemple :

En utilisant le tableau fourni, les requêtes renverraient les résultats suivants :

Approche de sous-requête :

ID Signal Station OwnerID
111 -120 Home 1
222 -95 Work 1

Jointure externe Approche :

ID Signal Station OwnerID
111 -120 Home 1
222 -95 Work 1

Conclusion :

Les deux approches atteignent le même objectif : récupérer la valeur maximale du signal pour chaque ID. L'approche par sous-requête peut être plus efficace pour les petits ensembles de données, tandis que l'approche par jointure externe peut être plus efficace pour les ensembles de données plus volumineux, surtout s'il existe plusieurs lignes avec des signaux identiques.

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