Можете да получите всички данни на ред, комбинирайки ORDER BY
и LIMIT 1
. Във вашия случай използвайте това два пъти и комбинирайте с 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
)
Друг начин е да намерите максималната възраст на мъжете и жените (с подзаявки):
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'
)
)
Ако имате повече от 2 пола или предпочитате да не кодирате твърдо Male
и Female
константи в заявката, това може да бъде пренаписано като:
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
Горните заявки имат основна разлика. Първият ще ви даде само един мъжки и само един женски резултат (най-много). 2-ра и 3-та заявка ще ви даде повече от една, когато има много (мъже) с еднаква максимална възраст и по подобен начин за жени.
Индекс на (gender, age)
ще помогне на всяка заявка.