2013-03-05 38 views
1

下面是一个例子表:MySQL |从和中减去COUNT用不同的WHERE子句

quizzes 

id user_id quiz_id has_passed attempts 
1  101  201  0    5   
2  101  202  1    1 
3  102  201  1    3 
4  103  203  1    2 

我有两个疑问,我想结合来获得竞猜失败尝试的次数。

第一个查询获取所有的尝试对于每次测验的总和:

SELECT quiz_id, SUM(attempts) as sum 
FROM quizzes 
GROUP BY quiz_id 

第二查询获取计数测验已通过的次数:我想减去

SELECT quiz_id, COUNT(*) as count 
FROM quizzes 
WHERE has_passed =1 
GROUP BY quiz_id 

尝试获取由quiz_id分组的失败尝试次数的总尝试次数。

什么查询会给我一个看起来像这样的输出?

quiz_id failed_attempts  
201  7 
202  0 
203  1 

谢谢!

回答

5
SELECT quiz_id, SUM(attempts - has_passed) failed_attempts 
FROM quizzes 
GROUP BY quiz_id 

输出

| QUIZ_ID | FAILED_ATTEMPTS | 
----------------------------- 
|  201 |    7 | 
|  202 |    0 | 
|  203 |    1 | 

sqlfiddle

1

你可以写:

SELECT quiz_id, 
     SUM(attempts) - COUNT(CASE WHEN has_passed = 1 THEN 1 END) 
     AS failed_attempts 
    FROM quizzes 
GROUP 
    BY quiz_id 
; 
0

我认为你正在寻找:

SELECT quiz_id, SUM(attempts) AS attempts, SUM(attempts-has_passed) AS failed_attempts 
FROM quizzes 
GROUP BY quiz_id 
0

试试下面

选择quiz_id,(SUM(未遂) - COUNT(*))从测验失败的尝试 集团通过quiz_id