select * from test数据:A B C 1 1 1 1 2 2 1 3 3 2 2 5 3 4 6 ---将B栏位值相同的对应的C 栏位值加总select a,b,c, SUM(C) OVER (PARTITION BY B) C_Sumfrom testA B C C_SUM 1 1 1 1 1 2 2 7 2 2 5 7 1 3 3 3 3 4 6 6 ---如果不需要已某个栏位的值分割,那就要用 nulleg: 就是将C的栏位值summary 放在每行后面select a,b,c, SUM(C) OVER (PARTITION BY null) C_Sumfrom testA B C C_SUM 1 1 1 17 1 2 2 17 1 3 3 17 2 2 5 17 3 4 6 17
求个人工资占部门工资的百分比
二:开窗函数 开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化,举例如下: 1: over(order by salary) 按照salary排序进行累计,order by是个默认的开窗函数 over(partition by deptno)按照部门分区2: over(order by salary range between 5 preceding and 5 following) 每行对应的数据窗口是之前行幅度值不超过5,之后行幅度值不超过5 例如:对于以下列 aa 1 2 2 2 3 4 5 6 7 9 sum(aa)over(order by aa range between 2 preceding and 2 following) 得出的结果是 AA SUM ---------------------- ------------------------------------------------------- 1 10 2 14 2 14 2 14 3 18 4 18 5 22 6 18 7 22 9 9 就是说,对于aa=5的一行 ,sum为 5-1<=aa<=5+2 的和 对于aa=2来说 ,sum=1+2+2+2+3+4=14 ; 又如 对于aa=9 ,9-1<=aa<=9+2 只有9一个数,所以sum=9 ; 3:其它: over(order by salary rows between 2 preceding and 4 following) 每行对应的数据窗口是之前2行,之后4行 4:下面三条语句等效: over(order by salary rows between unbounded preceding and unbounded following) 每行对应的数据窗口是从第一行到最后一行,等效: over(order by salary range between unbounded preceding and unbounded following) 等效 over(partition by null) 相关资源:谷歌安装器(如果Go安装器无法打卡可以使用这个)