Mysql
 sql >> Database >  >> RDS >> Mysql

Come usare MAX in MySQL?

Puoi ottenere tutti i dati di una riga combinando ORDER BY e LIMIT 1 . Nel tuo caso, utilizzalo due volte e combinalo con 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
  )

Un altro modo è inserire l'età massima di maschi e femmine (con sottoquery):

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'
          )
      )

Se hai più di 2 sessi o se preferisci non codificare Male e Female costanti nella query, questo può essere riscritto come:

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

Le query di cui sopra presentano una differenza principale. Il 1° ti darà un solo risultato maschile e solo uno femminile (al massimo). La seconda e la terza query ti daranno più di una quando ce ne sono molti (maschi) con la stessa età massima e allo stesso modo per le femmine.

Un indice su (gender, age) aiuterà entrambe le query.