Primero, su cálculo de edad es incorrecto. Es casi seguro que desea medir los meses entre las dos fechas en lugar de esperar que dividir por 365,25 sea lo suficientemente cercano
trunc( months_between( sysdate, p.birth_date )/ 12 )
En segundo lugar, si desea agrupar por rangos, solo necesita seleccionar el rango en un case
declaración y grupo por eso
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)