まず、年齢の計算が正しくありません。 365.25で割るのが十分に近いことを期待するのではなく、ほぼ確実に2つの日付の間の月を測定する必要があります
trunc( months_between( sysdate, p.birth_date )/ 12 )
次に、範囲でグループ化する場合は、case
で範囲を選択するだけです。 ステートメントとそれによるグループ化
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)