SQL count和sum的使用

(1)sum:不为NULL的列值总和

sum(字段值):对该列中不为NULL的值求和,如果列值为0,也会纳入统计。

(2)count:统计满足条件的行数

count(0)=count(1)=count(*) --不忽略null值和空值
count(列名) --忽略null值

count(*):对所有的列进行扫描,包括NULL和重复项,不能和DISTINCT一起使用,只返回表中的行数,它只需要找到属于表的数据块头,计算一下行数,不需要读取数据列中的数据。

执行效率:

(1)列名为主键,count(列名)会比count(1)快
(2)列名不为主键,count(1)会比count(列名)快
(3)如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)
(4)如果有主键,则 select count(主键)的执行效率是最优的
(5)如果表只有一个字段,则 select count(*)最优。

count和sum与if的联合使用:

(1)select SUM(IF(字段名=“XXX”,1,0)) where aaa。

语句执行,先根据aaa条件筛选数据,再根据IF统计,如果字段为xxx,那该条记录累加1,否则累加0。

(2)select count(IF(字段名= “XXX”,1,0)) where aaa

语句执行,先根据aaa条件筛选,在根据IF统计,如果字段为XXX,那么就累加count(1),但是如果不满足就是count(0),其实count(1)和count(0)是一个意思,最终不管字段名为什么,统计数都是一样的。

(3)修改:select count(IF(字段名= “XXX”,1,null)) where aaa。符合条件就累加1,不符合条件就不累加。