MySQL |使用不同的WHERE子句从SUM中减去COUNT

时间:2013-03-05 20:53:09

标签: mysql

以下是一个示例表:

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

谢谢!

4 个答案:

答案 0 :(得分: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 :(得分:1)

你可以写:

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

答案 2 :(得分:0)

我认为你在寻找:

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

答案 3 :(得分:0)

尝试以下

选择quiz_id,(sum(尝试) - count(*))作为测验失败的尝试 按quiz_id分组