Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie verwende ich MAX in MySQL?

Sie können alle Daten einer Zeile erhalten, indem Sie ORDER BY kombinieren und LIMIT 1 . Verwenden Sie dies in Ihrem Fall zweimal und kombinieren Sie es mit 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
  )

Eine andere Möglichkeit besteht darin, das maximale Alter von Männern und Frauen zu ermitteln (mit Unterabfragen):

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

Wenn Sie mehr als 2 Geschlechter haben oder Male nicht fest codieren möchten und Female Konstanten in der Abfrage, kann dies umgeschrieben werden als:

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

Die obigen Abfragen haben einen Hauptunterschied. Die 1. gibt Ihnen (höchstens) nur ein männliches und nur ein weibliches Ergebnis. Die 2. und 3. Abfrage gibt Ihnen mehr als eine, wenn es viele (Männer) mit demselben Höchstalter gibt und ähnlich für Frauen.

Ein Index zu (gender, age) hilft beiden Abfragen.