有人说sum(1) 相当于 count(1) ,其实还是有一点点差别;
1. 首先说一下使用过程中注意的点
sum(1) count(1) 使用过程中都有可能返回值为NULL,并不是统计不到就返回值为0
以下数据表实例
<1> 对于sum(1),如果带 where 条件查不到数据,则返回Null
SELECT sum(1) FROM tickets WHERE `order` > 10000
<2> 对于 count(1) ,如果带 where 且 group by 操作, where条件下无数据,也会返回NUll
SELECT count(1) FROM tickets WHERE `order` > 10000 GROUP BY priority
都可以用 IFNULL(count(1),0) 优化处理
2.具体说一下 sum(1) count(1) 统计数据上面的差别
SELECT sum(if(t.`order`=666,1,0)) as sum , count(if(t.`order`=666,1,0)) as count, count(1), count(0), sum(1), sum(0) FROM tickets t GROUP BY priority
可以看到,count() 其中请携带的if条件没有起作用,在分组后,count(1) count(0) 统计的都是所有条数, sum可根据 0 1 起到 if() 我们想要的统计效果
多多实践总结~