Maison >base de données >tutoriel mysql >Comment trouver efficacement les valeurs max/min par groupe à l'aide des jointures SQL ?
Dans cette solution, nous utilisons une opération de jointure pour récupérer les lignes avec les valeurs les plus élevées ou les plus basses pour une colonne spécifiée dans chaque groupe, sans recourir au classement ou aux sous-requêtes.
Pour trouver la ligne avec la valeur OrderField la plus élevée par group :
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;
Dans le cas de plusieurs enregistrements partageant la même valeur maximale de OrderField au sein d'un groupe, vous souhaiterez peut-être affiner davantage la condition :
SELECT t1.* FROM `Table` AS t1 LEFT OUTER JOIN `Table` AS t2 ON t1.GroupId = t2.GroupId AND (t1.OrderField < t2.OrderField OR (t1.OrderField = t2.OrderField AND t1.Id < t2.Id)) WHERE t2.GroupId IS NULL
Cette approche garantit que le la ligne avec la plus grande valeur OrderField est renvoyée lorsqu'il y a des égalités au sein d'un groupe.
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!