上一篇我们讲了count聚合函数的基本功能,以及在2005、2008版本中新增的over partition by来实现分组计数的功能。
在SQL Server 2012、2014中进一步加强了count的功能,使得count在配合over时,一共有3种用法。
1、count(*) over(partition by 分组字段 )
这种用法在上一篇中已将讲过,是2005、2008中新增的功能。
2、count(*) over(partition by 分组字段 order by 字段)
这种用法就是先按照分组字段分组,然后在每一个分组中排序,那么这个时候count计算的是一个 累积的值。
3、count(*) over(order by 字段 )
下面是例子:
select *, count(*) over(partition by groupname ) 每个组的个数, --2005/2008 count(*) over(partition by groupname order by id) 每个组的累积个数, --2012/2014 count(*) over(order by id) 累积个数 --2012/2014 from test /* id name groupname 每个组的个数 每个组的累积个数 累积个数 1 小明 开发部 3 1 1 4 小张 开发部 3 2 2 5 小白 开发部 3 3 3 8 小王 财务部 3 1 4 9 NULL 财务部 3 2 5 15 小刘 财务部 3 3 6 16 小高 行政部 4 1 7 18 小王 行政部 4 2 8 23 小李 行政部 4 3 9 29 小吴 行政部 4 4 10 */
附上建表语句:
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,'小吴','行政部');