oracle的分析函数over及开窗函数oracle的分析函数over及开窗函数一:,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。下面通过几个例子来说明其应用。1:统计某商店的营业额。datesale1202**********规则:按天统计:每天都统计前面几天的总额得到的结果:DATESALESUM-------------------12020--1天21535--1天,2天31449--1天,2天,:统计各班成绩第一名的同学信息NAMECLASSS--------------------------------fda180ffd178dss195cfe274gds292gf399ddd399adf345asdf3553dd378通过:--select*from(selectname,class,s,rank()over(partitionbyclassorderbysdesc)mmfromt2)wheremm=1--得到结果:NAMECLASSSMM------------------------------------------------------dss1951gds2921gf3991ddd3991注意:,不能用row_number(),因为如果同班有两个并列第一,row_number()()和dense_rank()的区别是:--rank()是跳跃排序,有两个第二名时接下来就是第四名--dense_rank()l是连续排序,(并显示信息)ABC--------------------------ma2na3ma2nb2nb1xb3xb2xb4hb3selecta,c,sum(c)over(partitionbya)fromt2得到结果:ABCSUM(C)OVER(PARTITIONBYA)-----------------------------------hb33ma24ma24na36nb26nb16xb39xb29xb49如果用sum,groupby则只能得到ASUM(C)------------------------h3m4n6x9无法得到B列值,,,,,select*fromtest数据:ABC111122133225346---将B栏位值相同的对应的C栏位值加总selecta,b,c,SUM(C)OVER(PARTITIONBYB)_SUM11111227225713333466---如果不需要已某个栏位的值分割,那就要用nulleg:就是将C的栏位值summary放在每行后面selecta,b,c,SUM(C)OVER(PARTITIONBYnull)_SUM1111712217133172251734617求个人工资占部门工资的百分比SQL>select*fromsalary;NAMEDEPTSAL-------------------a102000b103000c105000d204000SQL>selectname,dept,sal,sal*100/sum(sal)ov
oracle分析函数over及开窗函数 来自淘豆网m.daumloan.com转载请标明出处.