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"
正確統計結果: