sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo usar MAX en MySQL?

Puedes obtener todos los datos de una fila combinando ORDER BY y LIMIT 1 . En tu caso, usando esto dos veces y combinándolo 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
  )

Otra forma es encontrar la edad máxima de hombres y mujeres (con 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'
          )
      )

Si tiene más de 2 géneros o si prefiere no codificar Male y Female constantes en la consulta, esto se puede reescribir 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

Las consultas anteriores tienen una diferencia principal. El primero le dará solo un resultado masculino y solo uno femenino (como máximo). La segunda y la tercera consulta le darán más de uno cuando hay muchos (hombres) con la misma edad máxima y de manera similar para las mujeres.

Un índice sobre (gender, age) ayudará a cualquier consulta.