Énoncé du problème
Comment peut-on récupérer efficacement l'enregistrement avec le plus élevé ou la valeur la plus basse pour un champ spécifique au sein de chaque groupe défini par un autre champ ?
Solution utilisant Left Outer Rejoindre
Pour récupérer l'enregistrement avec la valeur la plus élevée pour le champ OrderField dans chaque GroupId, utilisez la requête suivante :
SELECT t1.* FROM `Table` AS t1 LEFT OUTER JOIN `Table` AS t2 ON t1.GroupId = t2.GroupId AND t1.OrderField < t2.OrderField WHERE t2.GroupId IS NULL ORDER BY t1.OrderField;
Avantages de l'approche Join
Alternatives
Si les données sont petites ou l'implémentation spécifique du moteur de base de données que vous utilisez est mal optimisée pour les jointures, vous pouvez envisager des alternatives telles que as :
Inefficacité de la méthode utilisant la variable @Rank
La méthode que vous avez décrite en utilisant la variable @Rank, telle qu'écrite à l'origine, ne fonctionnera pas correctement car la variable @Rank ne se réinitialise pas à zéro après le traitement de la première table. Pour résoudre ce problème, vous devrez ajouter une autre table dérivée pour réinitialiser @Rank à zéro avant de traiter la deuxième table. Cependant, cette approche reste inefficace par rapport à l'approche join.
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!