2016-03-04 190 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'