2016-03-04 247 views
0

我的查詢計算計數,然後總計數的總和MySql的

$sql = 'SELECT status FROM tablename'; 

而結果

------------ 
status 
------------ 
assigned 
assigned 
assigned 
assigned 
assigned 
accepted 
accepted 
completed 
completed 
completed 
completed 
completed 

現在,我能找到的每一個狀態

SELECT status, COUNT(status) AS cnt 
FROM tname 
GROUP BY b.statusName 
HAVING (cnt >= 1) 

這總計數將給


status  cnt 
-------------- 
accepted 2 
assigned 5 
completed 5 

我如何求和只有completedaccepted算?

+0

嘗試使用子選擇嗎? –

回答

2

這就是所謂的條件求和,更換group by當你用sum()函數中的條件:

SELECT SUM(IF(status IN ('accepted','assigned'),cnt,0)) as sum_of_acc_asg 
FROM  
    (SELECT status, COUNT(status) AS cnt 
    FROM tname 
    GROUP BY b.statusName 
    HAVING (cnt > 1)) t 

或者你可以用在哪裏篩選子查詢第一:

SELECT SUM(cnt) as sum_of_acc_asg 
FROM  
    (SELECT status, COUNT(status) AS cnt 
    FROM tname 
    WHERE status IN ('accepted','assigned') 
    GROUP BY b.statusName 
    HAVING (cnt > 1)) t 
1

其簡單,通過where

SELECT status, COUNT(status) AS cnt 
FROM tname 
WHERE b.statusName IN ('completed','accepted') 
HAVING (cnt > 1) 
0

SELECT COUNT(狀態) AS cnt FROM tname WHERE status ='completed'or status ='accepted'