首先要弄清楚 count() 的语义。count() 是一个聚合函数,对于返回的结果集,一行行地判断,如果 count 函数的参数不是 NULL,累计值就加 1,否则不加。最后返回累计值。
所以,count(*)、count(1)和count(主键) 都表示返回满足条件的结果集的总行数;而 count(字段),则表示返回满足条件的数据行里面,参数 "字段" 不为 NULL 的总个数。
以测试表为例,表内加载了10万行记录,其中允许null值的字段name存在3个null值;
create table tabcount
(
id integer,
name varchar(40),
age integer not null ,
primary key (id)
);