count(1) ,count(*),count(列名)的查询结果及执行效率
从查询结果上看:
count(1)忽略所有列,用1代表每一行,相当于总行数,在统计结果的时候不会忽略null值;
count(*)包括了所有列,相当于总行数,在统计结果的时候不会忽略null值;
count(列名)只包括列名那一列,在统计结果的时候会忽略null值;
从执行效率上看:
列名为主键时,count(列名)效率最高;
列名不为主键时,count(1)和count(*)的效率更高;
表中只有一个字段时,count(*)的效率更高;
表中有多个字段时,count(1)的效率更高;
count(count())的用法
count(count()) group by 是对分组的计数,和count(count() group by)的执行结果一致。
举例说明:查询选了课程的学生人数
SELECT COUNT(1)
FROM (SELECT SNO
FROM SC
GROUP BY SNO
);
SELECT COUNT(COUNT(SNO))
FROM SC
GROUP BY SNO;