orace评级函数

rank() over (order by XX):

 /***********
    这个sql可以看出 rank其实就是拿当前的一列和别的行相同的列进行排列
 */
 select 
   t.amount 
   ,rank() over (order by t.amount desc) as rank
  from all_sales t
 where t.year=2003
 and t.amount is not null
 order by t.amount desc

 结果为:

1	32754.19	1
2	29057.45	2
3	27264.84	3
4	25214.56	4
5	25057.45	5
6	24137.83	6
7	24057.45	7
8	23754.19	8
9	23264.84	9
10	22754.19	10
11	22754.19	10
12	22137.83	12
 

加上group by

select 
t.prd_type_id
,sum(amount)  --有没有sum(amount)都是一样的。
,RANK() OVER(ORDER BY avg(amount) desc )as rank  --它的意思是在此分组的情况下 此时sum(amount)和别的行的sum(amount)的排列
,DENSE_RANK() OVER (ORDER BY SUM(amount) desc) as dense_rank  --排列相同的情况下,也有编号
 from all_sales t
 where t.year=2003
 and t.amount is not null
 group by t.prd_type_id
 order by t.prd_type_id

 

结果:

1	1	905081.84	1	1
2	2	186381.22	4	4
3	3	478270.91	2	2
4	4	402751.16	3	3

 

 

结合partition by子句使用:

select 
t.prd_type_id
,t.month
,sum(amount)
,rank() over(partition by t.month order by sum(t.amount) desc) as rank  --加上了partition说明 month这列是子分组,排列是按照 t.prd_type_id,和sum(t.amount)来进行排列的
 from all_sales t
 where t.year=2003
 and t.amount is not null
 group by t.prd_type_id,t.month  --(1)总的来说是按照 2列来进行分组查找的,
 order by t.prd_type_id,t.month

 

这也说明分组最少要有2组使用partition 才有意义,如果是一组,去掉一个子分组 就是分组那个组,等于没分组。

结果:

1	1	1	38909.04	1
2	1	2	70567.9	1
3	1	3	91826.98	1
4	1	4	120344.7	1
5	1	5	97287.36	1
6	1	6	57387.84	1
7	1	7	60929.04	2
8	1	8	75608.92	1
9	1	9	85027.42	1
10	1	10	105305.22	1
11	1	11	55678.38	1
12	1	12	46209.04	2
13	2	1	14309.04	4
14	2	2	13367.9	4
15	2	3	16826.98	4
16	2	4	15664.7	4
17	2	5	18287.36	4
18	2	6	14587.84	4
19	2	7	15689.04	3
20	2	8	16308.92	4
21	2	9	19127.42	4
22	2	10	13525.14	4
23	2	11	16177.84	4
24	2	12	12509.04	4
25	3	1	24909.04	2
26	3	2	15467.9	3
27	3	3	20626.98	3
28	3	4	23844.7	2
29	3	5	18687.36	3
30	3	6	19887.84	3
31	3	7	81589.04	1
32	3	8	62408.92	2
33	3	9	46127.42	3
34	3	10	70325.29	3
35	3	11	46187.38	2
36	3	12	48209.04	1
37	4	1	17398.43	3
38	4	2	17267.9	2
39	4	3	31026.98	2
40	4	4	16144.7	3
41	4	5	20087.36	2
42	4	6	33087.84	2
43	4	7	12089.04	4
44	4	8	58408.92	3
45	4	9	49327.42	2
46	4	10	75325.14	2
47	4	11	42178.38	3
48	4	12	30409.05	3

 

你可能感兴趣的:(sql)