本文整理自网络,侵删。
目录
- OVER的定义
- 语法
- 用法
- 示例
- SUM后的开窗函数
- 排序
- ROWS|RANGE
- 参考
- 总结
OVER的定义
OVER用于为行定义一个窗口,它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列。
语法
OVER ( [ PARTITION BY column ] [ ORDER BY culumn ] [ROWS|RANGE BETWEEN 边界规则1 and 边界规则2])
PARTITION BY 子句进行分组;
ORDER BY 子句进行排序;
ROWS|RANGE 框架是对窗口进行进一步的分区,框架有两种范围限定方式:一种是使用ROWS子句,通过指定当前行之前或之后的固定数目的行来限制分区中的行数;另一种是RANGE子句,按照排序列的当前值,根据相同值来确定分区中的行数。
窗口函数OVER()指定一组行,开窗函数计算从窗口函数输出的结果集中各行的值。
RANGE表示按照值的范围进行范围的定义,而ROWS表示按照行的范围进行范围的定义;边界规则的可取值见下表
用法
OVER开窗函数必须与聚合函数或排序函数一起使用,聚合函数一般指SUM(),MAX(),MIN,COUNT(),AVG()等常见函数。排序函数一般指RANK(),ROW_NUMBER(),DENSE_RANK(),NTILE()等。
示例
创建测试表
create table Employee ( ID INT PRIMARY KEY ,Name VARCHAR(20) ,GroupName VARCHAR(20) ,Salary INT ) INSERT into Employee VALUES(1, '小明', '开发部', 8000), (4, '小张', '开发部', 7600), (5, '小白', '开发部', 7000), (8, '小王', '财务部', 5000), (9, null, '财务部', NULL), (15, '小刘', '财务部', 6000), (16, '小高', '行政部', 4500), (18, '小王', '行政部', 4000), (23, '小李', '行政部', 4500), (29, '小吴', '行政部', 4700) ;
SUM后的开窗函数
select * ,SUM(Salary) OVER(PARTITION BY Groupname) 每个组的总工资 ,SUM(Salary) OVER(PARTITION BY groupname ORDER BY ID) 每个组的累计总工资 ,SUM(Salary) OVER(ORDER BY ID) 累计工资 ,SUM(Salary) OVER() 总工资 from Employee
结果如下:
相关阅读 >>
关于windows server 2012上安装.net framework 3.5的问题
基于sqlalchemy实现操作mysql并执行原生sql语句
更多相关阅读请进入《sql》频道 >>
数据库系统概念 第6版
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » SQL窗口函数OVER用法实例整理
相关推荐
评论
管理员已关闭评论功能...