Tout d'abord, votre calcul d'âge est incorrect. Vous voulez presque certainement mesurer les mois entre les deux dates plutôt que d'espérer que la division par 365,25 est assez proche
trunc( months_between( sysdate, p.birth_date )/ 12 )
Deuxièmement, si vous souhaitez regrouper par plages, il vous suffit de sélectionner la plage dans un case
déclaration et groupe par cela
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)