Вы можете просто использовать агрегацию:
select
timestampdiff(year, date_nac, current_date) age,
count(distinct patient_id) no_patients
from patient
group by age
order by no_patients desc
Если в таблице patient
нет повторяющихся patient_id
s (как и должно быть), вы можете использовать count(*)
вместо более дорогой count(distinct patient_id)
.
Я предполагаю, что вы хотите, чтобы вам были нужны только 6 самых популярных возрастов: если это так, вы можете просто добавить limit 6
t в конец запроса.