怎么在Oracle中实现如下SQL的查询?

有一张表TEST,表字段如下:
time a b c d
2016-08-04 5481.41 142.77 697.1 14447.7
2016-11-16 461.7 4142.17 1647.1 446.69
2016-08-04 48.41 8142.63 697.1 5447.7
2016-08-04 5481.41 342.57 147.1 18747.7

a,b,c,d按照数值有等级区分,
对于a和b字段:
0-500 1

500-1000 2
1000-3000 3
>3000 4

对于c字段:
0-255 1

255-900 2
900-3000 3
>3000 4

对于d字段:
0-500 1

500-1000 2
>1000 3

按时间范围查询,想实现的查询结果如下:
rankAB rankC rankD avg_a avg_b avg_c max_d rate
1 3 4 154.56 5843.25 586.14 251.11 0.25
2 1 2 154.56 5843.25 586.14 251.11 0.14
1 1 3 154.56 5843.25 586.14 251.11 0.09
……

其中rankAB为 取TEST表中每行a和b最大值计算等级;rankC和rankD分别为c和d的等级,按照三种等级分组,avg_*分别为a,b,c列的平均值,max_d为改组D列最大值,rate位该组数据的比例。

本人对SQL不是很精通,希望能给出oracle的查询sql,或者给出一些oracle中的方法指导,谢谢了。

用case when
http://www.cnblogs.com/eshizhan/archive/2012/04/06/2435493.html