För det första är din åldersberäkning felaktig. Du vill nästan säkert mäta månaderna mellan de två datumen snarare än att hoppas att det är tillräckligt nära att dividera med 365,25
trunc( months_between( sysdate, p.birth_date )/ 12 )
För det andra, om du vill gruppera efter intervall behöver du bara välja intervallet i ett case
uttalande och gruppera 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)