【SQL 编程你也行】SQL Server新功能之函数:count函数(2012、2014的over partition by order by)


上一篇我们讲了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 字段 )

这种用法就是把所有数据作为一个分组,然后排序,那么这个时候count计算的是一个 累积的值。


下面是例子:

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,'小吴','行政部');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值