1.情景展示
关于count()函数的用法,我们常用的有count(1),count(*),count(列名),count(distinct 列名),关于这些用法见文末推荐;
在mysql中,count()函数里面是可以加表达式的,即:count(表达式),这个有什么用处呢?
通常情况下,我们经常会用到状态,比如说用某一字段来表示用户的状态,当我们需要进行按用户状态进行统计计数时,用它将会变得非常方便。
但是,在实际运用过程中,你将会发现神奇的一幕:
该表中,明明有maintype=1和maintype=2的行记录,但是,我们会发现,不论是maintype=1还是maintype=2,其统计结果和统计该列的总数没有任何区别,这是怎么回事?
2.原因分析
原因就出在表达式上:count()函数,只有当括号()里面的值为null时,不进行计数,否则,count(任意内容)都会进行计数+1,具体示例如下:
看懂这个例子,就会明白为什么maintype=1和maintype=2并没有起作用的原因
3.解决方案
由上面我们知道:只有在null时,count才不会计数,所以,当=不成立时,让它执行count(null)
解决办法:在原有表达式的基础上+"or null"
正确统计结果: