Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment utiliser MAX dans MySQL ?

Vous pouvez obtenir toutes les données d'une ligne combinant ORDER BY et LIMIT 1 . Dans votre cas, utilisez ceci deux fois et combinez avec UNION :

  ( SELECT * 
    FROM person 
    WHERE gender = 'Male'
    ORDER BY age DESC
    LIMIT 1
  )
UNION ALL
  ( SELECT * 
    FROM person 
    WHERE gender = 'Female'
    ORDER BY age DESC
    LIMIT 1
  )

Une autre façon est de trouver l'âge maximum des hommes et des femmes (avec des sous-requêtes) :

SELECT *
FROM person
WHERE ( gender = 'Male'
      AND age =  
          ( SELECT MAX(age) 
            FROM person 
            WHERE gender = 'Male'
          )
      )
   OR ( gender = 'Female'
      AND age =  
          ( SELECT MAX(age) 
            FROM person 
            WHERE gender = 'Female'
          )
      )

Si vous avez plus de 2 genres ou si vous préférez ne pas coder en dur Male et Female constantes dans la requête, cela peut être réécrit comme :

SELECT p.*
FROM person AS p
  JOIN
      ( SELECT gender
             , MAX(age) AS maxage 
        FROM person 
        GROUP BY gender
      ) AS pg
    ON  pg.gender = p.gender
    AND pg.maxage = p.age

Les requêtes ci-dessus ont une différence principale. Le 1er vous donnera un seul résultat masculin et un seul résultat féminin (au plus). La 2ème et 3ème requête vous en donnera plus d'une lorsqu'il y a plusieurs (hommes) avec le même âge maximum et de même pour les femmes.

Un index sur (gender, age) aidera l'une ou l'autre requête.