有一個需求就是統計某個任務單狀態的數量,當然我們可以使用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