Maison > base de données > tutoriel mysql > Comment sélectionner uniquement les lignes avec la valeur maximale dans une colonne à l'aide de SQL?

Comment sélectionner uniquement les lignes avec la valeur maximale dans une colonne à l'aide de SQL?

Linda Hamilton
Libérer: 2025-01-25 20:57:11
original
217 Les gens l'ont consulté

How to Select Only Rows with the Maximum Value in a Column Using SQL?

SQL Sélectionner les lignes avec une valeur maximale dans la colonne : guide complet

Description du problème :

Considérez le tableau suivant contenant les informations du document :

id rev content
1 1 ...
2 1 ...
1 2 ...
1 3 ...

Le but est de récupérer une ligne par identifiant, contenant uniquement le document ayant le plus grand numéro de révision (rev). Le résultat attendu pour les données données est :

id rev content
1 3 ...
2 1 ...

Ce problème se produit généralement dans SQL où l'utilisateur est invité à trouver la ligne de données avec la valeur maximale dans la colonne pour un identifiant de groupe donné.

Solution 1 : Utiliser la connexion par sous-requête

La première méthode consiste à créer une sous-requête qui identifie l'identifiant du groupe (id) et la valeur maximale dans la colonne rev. Cette sous-requête peut être jointe à la table principale en utilisant une condition d'égalité sur l'identifiant du groupe et la valeur maximale.

<code class="language-sql">SELECT a.id, a.rev, a.contents
FROM YourTable a
INNER JOIN (
    SELECT id, MAX(rev) rev
    FROM YourTable
    GROUP BY id
) b ON a.id = b.id AND a.rev = b.rev</code>
Copier après la connexion

Solution 2 : La gauche rejoint elle-même

La deuxième méthode utilise une opération de jointure gauche pour associer la table à elle-même. Spécifiez les conditions d'égalité sur les identifiants de groupe (id). Pour garantir que seule la ligne avec la valeur de rev la plus élevée est sélectionnée, ajoutez une condition qui vérifie si la valeur de rev droite est inférieure à la valeur de rev gauche. Enfin, appliquez un filtre pour afficher uniquement les lignes avec une valeur de rev droite de NULL (indiquant qu'une valeur de rev maximale existe).

<code class="language-sql">SELECT a.*
FROM YourTable a
LEFT OUTER JOIN YourTable b
    ON a.id = b.id AND a.rev < b.rev
WHERE b.id IS NULL;</code>
Copier après la connexion

Conclusion :

Les deux solutions produisent les mêmes résultats et sont compatibles SQL ANSI. Le choix le plus approprié dépend des préférences personnelles et des caractéristiques spécifiques de performances de la base de données. Une analyse comparative est recommandée pour déterminer la meilleure approche pour différents scénarios.

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