mysql統計有條件的數據數量

有一個需求就是統計某個任務單狀態的數量,當然我們可以使用group語句,比如

select status,count(1) from task group by status

查詢一個列表出來。一般來說是可以的,但是這時候加一個條件,再讓任務單以機器的id統計,那就麻煩了。

select status,machineId,count(1) from task group by machineId, status

查詢的結果數量以幾何速度增長。

這時候我就需要在一條結果裏統計多個狀態的數量。

嘗試多次後發現count計數是記錄除了null以外的記錄,而條件語句有兩個值0和1,這兩個都會計數。

select 1 = 2;結果爲0
select 1 = 1; 結果爲1

我的想法就是用if函數來判斷,如果false則返回null

select machineId,count(if(status = '1',1,null)) statusCount1
,count(if(status = '2',1,null)) statusCount2
 from task group by machineId

試驗過後是可以的,但是這個寫法有點太複雜了,我在網上查詢資料後發現了更簡便的寫法

select machineId,count(status = '1' or null) statusCount1
,count(status = '2' or null) statusCount2
from task group by machineId

不過需要注意的是判斷式的參數只要是null就會返回null,除了is null和is not null

select null = 1;結果爲null
select null > 1;結果爲null
select null is null;結果爲1
select null is not null;結果爲0

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章