SQLServer之COUNT函数

来源:互联网 发布:linux 字符编码转换 编辑:程序博客网 时间:2024/06/06 05:08

定义:

返回一个组(Group)中满足参数表达式的行数。


格式:

COUNT( * ) 或者 COUNT( [ ALL | DISTINCT ] expression) 

COUNT(*) 表示获取该组中所有行的总行数,包含值为NULL的行。

COUNT(expression) 表示获取该组中满足表达式(expression)值不为NULL的行的行数。表达式(expression)可以用ALL 或者DISTINCT修饰,其中ALL是默认修饰,不写等同于ALL修饰,DISTINCT修饰表示不包含重复值的行。


返回值: INT

DEMO

准备基本数据:


DECLARE @t TABLE
(
[SID] BIGINT,
[Name] VARCHAR(50)
);


INSERT INTO @t
VALUES 
(1, 'yao'),
(2, NULL),
(3, 'zhao'),

(4, 'zhao')


1:使用COUNT(*)


SELECT COUNT(*)
FROM @t;


返回:4


2:使用COUNT(express)

A: 

SELECT COUNT([Name])

FROM @t

返回: 3 (第二条记录Name为NULL,不满足表达式不为NULL的条件,所以不被计数)。


B: ALL 修饰符

SELECT COUNT(ALL [Name])

FROM @t

返回:同A情况,因为ALL修饰符石默认的。


C: DISTINCT修饰符

SELECT COUNT(DISTINCT [Name])
FROM @t

返回:2  (第三条记录和第四条记录Name的值是一样的,所以只计数一个)


D:使用其他表达式

我们在使用COUNT(expression)是常常将表的列(如上例中的Name列)作为COUNT的参数表达式,其实express可以任意其他的非void类型的表达式,例如常量,变量

D-1:常量

SELECT COUNT(1)
FROM @t

返回: 4 (结果同COUNT(*)但是表达的意思却不一样, 常量1不为NULL,所以所有的行都被计数,结果也就是所有的行数。

想一想:

SELECT COUNT(DISTINCT 1)
FROM @t

的返回值是多少??? 当然是1了,因为所有的值都是1,所有只有一行被计数。


D-2:变量

DECLARE @v VARCHAR(50) = 'test';

SELECT COUNT(@v)
FROM @t

返回:4 (同上例)

想一想:

DECLARE @v VARCHAR(50) = NULL;

SELECT COUNT(@v)
FROM @t

返回多少呢??? 当然是0了,因为所有的值都是NULL,没有一个满足使参数表达式不为NULL。


注意:不可以直接将NULL作为COUNT的参数,COUNT(NULL)是无效的。


E:分组(Group By)

COUNT函数的计数是在一个组里的

SELECT COUNT(1)
FROM @t
GROUP BY [Name]

返回:

1

1

2

为什么呢??

根据Name列分组,会分3个组(所有结果会是3行),每组的行数分析同A-D的情况。


其他:

SQLServer中还有个和COUNT函数相似的函数:COUNT_BIG,他们俩就返回值不同,COUNT返回INT,COUNT_BIG返回BIGINT。




0 0
原创粉丝点击