mysql統計有條件的資料數量

2021-09-29 01:12:47 字數 1082 閱讀 6007

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

myslq有條件插入資料

要求是這樣的 我有乙個表存著基礎資料有乙個欄位是 管理號 我的目的是先查詢最新的管理號按照規則生成新管理號 然後insert到表裡新資料 由於查詢並不鎖表 所以在查詢到insert這步中間會有可能兩線程查詢到相同的管理號?參考了關鍵是如下的mysql語句,插入多條記錄 insert into cli...

有條件的表聯接

表1和表2在聯接時,希望顯示表1的全部記錄以及表2的部分記錄。嘗試使用下面的 sql 語句 select table1.table2as.from table1 left outer join select from table2 where rightname 計畫編制員 as table2as ...

RAILS有條件的校驗

rails中所有的驗證宣告都可以接受 if 選項,可以指定一段在校驗之前執行的 比如 只有在郵箱位址不為空的時候才驗證郵箱位址的格式 使用proc物件,呼叫時,傳入當前的模型物件作為引數,返回false時,不做校驗 validates format of email,with a za z0 9 a...