语法:sum(col1) over(partition by col2 order by col3 )

 准备数据:

DEPT_ID    ENAME          SAL
1 1000            A                     2500
2 1000            B                    3500
3 1000            C                    1500
4 1000            D                    2000
5 2000            E                    2500
6 2000            F                    2000
7 2000           G                    3500

主要有四种情况:

sum(sal) over (partition by deptno order by ename) 按部门“连续”求总和
sum(sal) over (partition by deptno) 按部门求总和
sum(sal) over (order by deptno,ename) 不按部门“连续”求总和
sum(sal) over () 不按部门,求所有员工总和,效果等同于sum(sal)。

1.有partition by有order by :   在partition by分组下,按照不同的order by col3实现递增汇总..    

SQL>>select DEPT_ID,ENAME,SAL,sum(SAL) over(partition by dept_id order by ENAME) AS TOTAL  from  dept_sal

结果:按照部门分组,按名字排序实现递增汇总.

DEPT_ID ENAME    SAL  TOTAL

1 1000       A           3500   3500
2 1000       B           3500  7000
3 1000       C          1500   8500
4 1000       D          2000  10500
5 2000       E          2500   2500
6 2000       F          2000   4500
7 2000       G         3500    8000

如果col3重复会只加总一次(当然在本例中这种写法毫无意义):

SQL>> select DEPT_ID,ENAME,SAL,sum(SAL) over(partition by dept_id order by SAL) AS TOTAL from dept_sal

DEPT_ID ENAME SAL TOTAL

11000 C 1500 1500
2 1000 D 2000 3500
3 1000 A 3500 10500
4 1000 B 3500 10500
5 2000 F 2000 2000
6 2000 E 2500 4500
7 2000 G 3500 8000

2.有partition by无order by:  实现分组内所有数据的汇总

SQL>>select DEPT_ID,ENAME,SAL,sum(SAL) over(partition by dept_id) AS TOTAL from dept_sal

DEPT_ID ENAME SAL TOTAL
1 1000 A 3500 10500
2 1000 B 3500 10500
3 1000 C 1500 10500
4 1000 D 2000 10500
5 2000 E 2500 8000
6 2000 F 2000 8000
7 2000 G 3500 8000

 3.无partition by有order by : 直接按order by 字段实现递增汇总

SQL>>select DEPT_ID,ENAME,SAL,sum(SAL) over(order by ENAME) AS TOTAL from dept_sal

    DEPT_ID ENAME SAL TOTAL
1 1000 A 3500 3500
2 1000 B 3500 7000
3 1000 C 1500 8500
4 1000 D 2000 10500
5 2000 E 2500 13000
6 2000 F 2000 15000
7 2000 G 3500 18500

如果order by 的值相同,会进行汇总,但汇总后显示的值会是一样的,如下:

SQL>>select DEPT_ID,ENAME,SAL,sum(SAL) over(order by DEPT_ID) AS TOTAL from dept_sal

DEPT_ID ENAME SAL TOTAL
1 1000 A 3500 10500
2 1000 B 3500 10500
3 1000 C 1500 10500
4 1000 D 2000 10500
5 2000 E 2500 18500
6 2000 F 2000 18500
7 2000 G 3500 18500

 4.无partition by无order by:  所有数据相加.

SQL>>select DEPT_ID,ENAME,SAL,sum(SAL) over() AS TOTAL from  dept_sal

DEPT_ID ENAME SAL TOTAL
1 1000 A 3500 18500
2 1000 B 3500 18500
3 1000 C 1500 18500
4 1000 D 2000 18500
5 2000 E 2500 18500
6 2000 F 2000 18500
7 2000 G 3500 18500

版权声明:本文为博主原创文章,未经博主允许不得转载。

最新文章

  1. PHP 输入流 php://input
  2. WebApi 2:属性路由 [Route()],attribute routing
  3. Mac 将mysql路径加入环境变量
  4. php使用注意点
  5. js this [转]
  6. UESTC 1272 Final Pan's prime numbers(乱搞)
  7. 英语初级学习系列-00-Hello-打招呼
  8. [03] 线程同步 synchronized
  9. 比较ASP.NET和ASP.NET Core[经典 Asp.Net v和 Asp.Net Core (Asp.Net Core MVC)]
  10. js隐藏中间4位,变成‘*’号
  11. c# DataSet转换为Json
  12. Codeforces 837E Vasya's Function - 数论
  13. iOS中使用RegexKitLite来试用正则表达式
  14. 树莓派挂载ntfs优盘
  15. CMS4.0——后知后觉
  16. ngx_lua学习笔记 -- capture + proxy 实现httpclient
  17. hadoop输出lzo文件并添加索引
  18. 2016级算法期末上机-B.简单·ModricWang's Fight with DDLs I
  19. OK6410之tftp下载内核,nfs…
  20. [PHP]AES加密----PHP服务端和Android客户端

热门文章

  1. 推荐使用集串口,SSH远程登录和FTP传输三合一工具MobaXterm
  2. win10下的jdk1.8安装
  3. ArcGIS for JavaScript 3.9 本机IIS部署
  4. Gym 100962J Jimi Hendrix (树形DP)
  5. hdu4786 Fibonacci Tree (最小生成树)
  6. HDU-ACM“菜鸟先飞”冬训系列赛——第8场(1004)
  7. bzoj 3437: 小P的牧场【斜率优化】
  8. Redis操作命令大全
  9. 洛谷P2384 最短路(dijkstra解法)
  10. 实验 - cut的应用