1、从执行结果上分析:
(1)、count(0)、count(1)和count(*)不会过滤空值
(2)、count(列名)会过滤空值
ps:同样的数据
count(0)、count(1)和count(*)结果:
count(列名)的结果:
sum(列名)的运算结果(有一列值为空):
sum(列名)的运算结果(先对为空的值进行赋值):
2、从执行效率上分析:
(1)、如果列为主键,count(列名)效率优于count(1)
(2)、如果列不为主键,count(1)效率优于count(列名)
(3)、如果表中存在主键,count(主键列名)效率最优
3、总结:
(1)、count(值),如果这个值不是null计1,如果这个值是null计0
count(0)、count(1)可以想象成在表中有一个字段,这个字段的值去全是0或1
count(*)执行时会把*翻译成字段的具体名字,效果同count(0)、count(1)一样,只不过多了个翻译的过程,效率相对会低一点
(2)、在用sum函数对某列进行求和的时候,可以先对该字段值为null的行进行赋值,以确保结果的正确性