Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como usar o MAX no MySQL?


Você pode obter todos os dados de uma linha combinando ORDER BY e LIMIT 1 . No seu caso, usando isso duas vezes e combinando com 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
  )

Outra maneira é encontrar a idade máxima de machos e fêmeas (com subconsultas):
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 você tiver mais de 2 gêneros ou se preferir não codificar Male e Female constantes na consulta, isso pode ser reescrito como:
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

As consultas acima têm uma diferença principal. O 1º lhe dará apenas um resultado masculino e apenas um feminino (no máximo). A 2ª e a 3ª consulta lhe darão mais de uma quando houver muitos (homens) com a mesma idade máxima e da mesma forma para mulheres.

Um índice em (gender, age) ajudará qualquer uma das perguntas.