Primeiro, seu cálculo de idade está incorreto. Você quase certamente quer medir os meses entre as duas datas, em vez de esperar que a divisão por 365,25 seja próxima o suficiente
trunc( months_between( sysdate, p.birth_date )/ 12 )
Segundo, se você deseja agrupar por intervalos, basta selecionar o intervalo em um
case
declaração e grupo por isso 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)