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
Libérer: 2025-01-06 12:42:40
original
177 Les gens l'ont consulté

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

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

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!

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