1.情景展示

  关于count()函数的用法,我们常用的有count(1),count(*),count(列名),count(distinct 列名),关于这些用法见文末推荐;

  在mysql中,count()函数里面是可以加表达式的,即:count(表达式),这个有什么用处呢?

  通常情况下,我们经常会用到状态,比如说用某一字段来表示用户的状态,当我们需要进行按用户状态进行统计计数时,用它将会变得非常方便。

  但是,在实际运用过程中,你将会发现神奇的一幕:

mysql count()函数使用表达式的正确用法_解决方案

  该表中,明明有maintype=1和maintype=2的行记录,但是,我们会发现,不论是maintype=1还是maintype=2,其统计结果和统计该列的总数没有任何区别,这是怎么回事?

2.原因分析

  原因就出在表达式上:count()函数,只有当括号()里面的值为null时,不进行计数,否则,count(任意内容)都会进行计数+1,具体示例如下:

mysql count()函数使用表达式的正确用法_mysql_02

  看懂这个例子,就会明白为什么maintype=1和maintype=2并没有起作用的原因

3.解决方案

  由上面我们知道:只有在null时,count才不会计数,所以,当=不成立时,让它执行count(null)

  解决办法:在原有表达式的基础上+"or null"

mysql count()函数使用表达式的正确用法_解决方案_03

  正确统计结果: 

mysql count()函数使用表达式的正确用法_解决方案_04

 

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!



作者:Marydon