For det første er din aldersberegning forkert. Du vil næsten helt sikkert måle månederne mellem de to datoer i stedet for at håbe, at det er tæt nok på at dividere med 365,25
trunc( months_between( sysdate, p.birth_date )/ 12 )
For det andet, hvis du vil gruppere efter intervaller, skal du blot vælge intervallet i en case
udsagn og grupper efter det
SELECT (case when age <= 5
then 'age <= 5'
when age > 5 and age <= 10
then 'age > 5 and age <= 10'
else 'age > 10'
end) bucket,
count(*)
FROM( SELECT trunc( months_between( sysdate, p.birth_date )/ 12 ) age
FROM person p )
GROUP BY (case when age <= 5
then 'age <= 5'
when age > 5 and age <= 10
then 'age > 5 and age <= 10'
else 'age > 10'
end)