Maison >base de données >tutoriel mysql >Comment trouver efficacement les valeurs max/min par groupe à l'aide des jointures SQL ?

Comment trouver efficacement les valeurs max/min par groupe à l'aide des jointures SQL ?

DDD
DDDoriginal
2025-01-02 13:41:38516parcourir

How to Efficiently Find Max/Min Values per Group Using SQL Joins?

Récupération des valeurs maximales/minimales par groupe à l'aide de jointures

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!

Déclaration:
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