Astuce SQL : Extraire la valeur maximale par groupe
Dans les requêtes de base de données, il est souvent nécessaire d'extraire la valeur maximale pour chaque regroupement différent du tableau. Cet article résoudra le problème de la sélection de l'enregistrement avec la valeur « Total » la plus élevée pour chaque « Nom » unique dans une table.
Exemples de tableaux et de données :
Supposons que nous ayons l'exemple de tableau suivant :
Name | Top | Total |
---|---|---|
cat | 1 | 10 |
dog | 2 | 7 |
cat | 3 | 20 |
horse | 4 | 4 |
cat | 5 | 10 |
dog | 6 | 9 |
Cible de la requête :
Notre objectif est d'extraire les résultats suivants :
Name | Top | Total |
---|---|---|
cat | 3 | 20 |
horse | 4 | 4 |
dog | 6 | 9 |
Solution :
Cela peut être réalisé en utilisant la requête SQL suivante :
<code class="language-sql">SELECT Name, Top, Total FROM sometable WHERE Total = (SELECT MAX(Total) FROM sometable i WHERE i.Name = sometable.Name);</code>
Explication :
Cette requête utilise une sous-requête dans la clause WHERE. La sous-requête recherche la valeur maximale de « Total » pour chaque groupe en fonction du « Nom ». La requête externe filtre ensuite la table et sélectionne uniquement les enregistrements dont le « Total » correspond à cette valeur maximale.
Alternative :
Alternative à l'utilisation de jointures internes :
<code class="language-sql">SELECT Name, Top, Total FROM sometable INNER JOIN ( SELECT MAX(Total) AS Total, Name FROM sometable GROUP BY Name ) AS max ON max.Name = sometable.Name AND max.Total = sometable.Total;</code>
Conclusion :
Les deux méthodes sont efficaces pour extraire les enregistrements requis de la table en identifiant la valeur maximale de « Total » pour chaque « Nom » distinct. Ces requêtes peuvent être adaptées à divers systèmes de gestion de bases de données et fournissent une méthode générale pour extraire des valeurs maximales à partir de données groupées.
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!