Đầu tiên, cách tính tuổi của bạn không chính xác. Bạn gần như chắc chắn muốn đo các tháng giữa hai ngày hơn là hy vọng rằng chia cho 365,25 là đủ gần
trunc( months_between( sysdate, p.birth_date )/ 12 )
Thứ hai, nếu bạn muốn nhóm theo phạm vi, bạn chỉ cần chọn phạm vi trong một case
tuyên bố và nhóm theo đó
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)