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.