you would need to have a small set somewhere to outer join to.
ops$tkyte@ORA9IR2> with data
2 as
3 (select level l,
4 case
5 when level = 1 then '0-15'
6 when level = 2 then '16-30'
7 when level = 3 then '31-60'
8 when level = 4 then '61-90'
9 when level = 5 then 'over 90'
10 end what
11 from dual
12 connect by level <= 5)
13 select data.what, count(t.what)
14 from ( select case
15 when dt1-dt2 < 16 then '0-15'
16 when dt1-dt2 < 31 then '16-30'
17 when dt1-dt2 < 61 then '31-60'
18 when dt1-dt2 < 91 then '61-90'
19 when dt1-dt2 >= 91 then 'over 90'
20 end what
21 from (select last_ddl_time dt1, created dt2 from all_objects)
22 ) t right outer join data on (data.what = t.what)
23 group by data.what, data.l
24 order by data.l
25 /
WHAT COUNT(T.WHAT)
------------------------------ -------------
0-15 27052
16-30 1
31-60 0
61-90 2
over 90 1366