Astuce SQL : Filtrez efficacement les lignes correspondant à la valeur maximale d'une colonne
Dans la base de données MySQL, il est souvent nécessaire d'extraire du groupe d'enregistrements la ligne correspondant à la valeur maximale d'une colonne spécifique. Cet article décrit deux méthodes principales.
Méthode 1 : Sous-requête et connexion
Cette méthode utilise une sous-requête pour déterminer la valeur maximale dans chaque groupe. La sous-requête regroupe les lignes par identifiant de regroupement et renvoie la valeur maximale de la colonne spécifiée. Ensuite, joignez les résultats à la table principale en utilisant l'identifiant de regroupement et la valeur maximale comme condition de jointure.
Exemple :
<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>
Méthode 2 : Auto-connexion et filtrage
Une autre façon consiste à joindre la table principale à elle-même en utilisant une jointure externe gauche. La condition de jointure est appliquée à l'identifiant de regroupement et une condition supplémentaire est ajoutée pour comparer les valeurs sur les côtés gauche et droit de la jointure. Le filtre garantit que seules les lignes sans ligne correspondante à droite (c'est-à-dire la ligne avec la plus grande valeur) sont incluses dans le résultat.
Exemple :
<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>
Résumé
Les deux méthodes donnent les mêmes résultats et sont conformes aux normes ANSI SQL. Ils sont également relativement respectueux des performances, mais les performances réelles varient en fonction du système de base de données, de la conception du schéma et de la présence d'index. Il est recommandé de comparer les deux approches afin de déterminer la meilleure solution pour un scénario spécifique.
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!