count语句支持*、列名、常量、变量,并且可以用distinct关键字修饰, 并且count(列名)不会累计null的记录。下面随便用一些例子示范一下count的规则:比如对如下表做统计,所有列这里都用sql_variant类型来表示。
if
(object_id
('t_test'
)>
0
)
drop
table
t_test
go
create
table
t_test
(a
sql_variant
,
b sql_variant
,
c
sql_variant
)
insert
into
t_test
select
1
,
1
,
'a'
insert
into
t_test
select
1
,
getdate
(),
null
insert
into
t_test
select
'a'
,
null
,
1
insert
into
t_test
select
3
,
null
,
null
insert
into
t_test
select
null
,
null
,
null
go
select
*
from
t_test
go
select
count
(*
) --总数
,
count
(nullif
(1
,
1
)) --永远返回0
,
count
(a
) --a数量
,
count
(b) --b数量
,
count
(distinct
a
) --a不重复数量
,
count
(isnull
(b,
c
)) --b或者c不为null数量
,
count
(Coalesce
(a
,
b,
c
)) --a或者b或者c不为null数量
,
count
(nullif
(a
,
b)) --a不等于b的数量
,
count
(nullif
(isnumeric
(cast
(a
as
varchar
(38
))),
0
))--a是数字的数量
from
t_test
(object_id
('t_test'
)>
0
)
drop
table
t_test
go
create
table
t_test
(a
sql_variant
,
b sql_variant
,
c
sql_variant
)
insert
into
t_test
select
1
,
1
,
'a'
insert
into
t_test
select
1
,
getdate
(),
null
insert
into
t_test
select
'a'
,
null
,
1
insert
into
t_test
select
3
,
null
,
null
insert
into
t_test
select
null
,
null
,
null
go
select
*
from
t_test
go
select
count
(*
) --总数
,
count
(nullif
(1
,
1
)) --永远返回0
,
count
(a
) --a数量
,
count
(b) --b数量
,
count
(distinct
a
) --a不重复数量
,
count
(isnull
(b,
c
)) --b或者c不为null数量
,
count
(Coalesce
(a
,
b,
c
)) --a或者b或者c不为null数量
,
count
(nullif
(a
,
b)) --a不等于b的数量
,
count
(nullif
(isnumeric
(cast
(a
as
varchar
(38
))),
0
))--a是数字的数量
from
t_test