SQL Server学习之路(12) —开窗函数OVER

今天给大家说说开窗函数OVER关键字的用法~

在做统计查询的时候经常会使用到聚集函数的分组查询,比如COUNT函数的分组查询:

--示例的建表语句

if object_id('test') is not null  

   drop table test  

go  

  

create table test  

(  

id int  primary key,  

name varchar(20),  

groupname varchar(20)  

)    

insert into test  

values(1,'小明','开发部'),  

      (4,'小张','开发部'),  

      (5,'小白','开发部'),    

      (8,'小王','财务部'),  

      (9, null,'财务部'),  

      (15,'小刘','财务部'),  

      (16,'小高','行政部'),  

      (18,'小王','行政部'),  

      (23,'小李','行政部'),  

      (29,'小吴','行政部');  


--开窗函数的使用

select *,  

       count(*) over(partition by groupname ) 每个组的个数,   

       count(*) over(partition by groupname order by id) 每个组的累积个数,  

       count(*) over(order by id)  累积个数 

from test   

返回的结果如下图:

SQL Server学习之路(12) —开窗函数OVER

从图上我们可以看到每个开窗函数的具体含义。

OVER (PARTITION BY...):

只对PARTITION BY后面的列进行分组统计

OVER (PARTITION BY ... ORDER BY ...):

对PARTITION BY后面的列进行分组,然后按ORDER BY 的顺序进行排序

OVER (ORDER BY ...):

只对ORDER BY 的内容进行排序


这里只简单介绍了与聚集函数COUNT配合使用的例子,还可以和其他聚集函数如SUM,MAX,MIN等结合使用,也可以与排序函数ROW_NUMBER(),RANK()以及DENSE_RANK()等一起使用。这里只介绍一下开窗函数的基本用法,其他配合使用的例子可以慢慢摸索~

上一篇:SQL Server系统表详细说明


下一篇:Android签名与认证详细分析之二(CERT.RSA剖析)