oracle分析函数和聚合函数的区别
分析函数语法:函数名(可选参数) over(可选分区句子,可选排序句子 )
可选分区句子(partition by):将查询结果分为不同的组,默认是将所有的结果作为一个分组。
可选排序句子(order by):将每个分区进行排序。
举个栗子:
1、查询每个部门最高绩效的人
select tno,
max(tnum)
from test_0123
group by tno;
结果:
tno | tnum |
1 | 90 |
2 | 80 |
3 | 100 |
4 | 98 |
2、但如果需要查询每个部门排名前三名绩效最高的。
这个时候使用聚合函数就达不到这个要求,因为聚合函数只返回一行数据,可以考虑使用分析函数,
select *
from (select tno,
tnum,
tname,
row_number() over(partition by tno order by tnum desc) rn
from test_0123) t
where t.rn < 4;
结果:
tno | tnum | tname | rn |
1 | 90 | Lisi | 1 |
1 | 70 | Zhansi | 2 |
1 | 70 | Yesterday | 3 |
2 | 97 | liusan | 1 |
2 | 80 | Zhangsan | 2 |
2 | 80 | Wiliam | 3 |
3 | 100 | Wangliu | 1 |
3 | 99 | mingsan | 2 |
3 | 88 | maishao | 3 |
4 | 98 | 9999 | 1 |