繁体   English   中英

当MySQL分组中不满足条件时显示计数0

[英]Show count 0 when condition is not met in MySQL group by

样本记录:

examid      setcode     answer
-------     --------   --------
10            A           A
10            A           B
10            A           X
10            B           A
10            B           B
10            B           C

我试图通过答案是X的setcode查找计数组。我尝试了以下查询:

SELECT setCode,COUNT(answer) FROM mcq_answer WHERE examid=10 AND answer='X' GROUP BY setCode

这将返回以下结果:

setcode     count
-------     -------- 
A            1  

但我正在寻找以下内容:

setcode     count
-------    -------- 
  A           1 
  B           0 

Setcode在这里是动态的。 我只提到了A和B。 可能有更多的setocdes,例如C,D,E,F等。我该怎么做。 我正在使用MySQL

您可以使用以下查询

SELECT  C.setCode ,
    SUM(CASE WHEN B.setcode IS NULL THEN 0
             ELSE 1
        END) AS answer
FROM    ( SELECT    A.setCode ,
                COUNT(1) AS cnt
      FROM      mcq_answer A
      GROUP BY  A.setCode
    ) C
    LEFT JOIN mcq_answer b ON C.setcode = B.setcode
                              AND B.answer = 'X'
 GROUP BY  C.setCode

您可以使用SUM + IF获得以下结果:

SELECT `setCode`, SUM(if (`answer`='X', 1,0)) as answer 
FROM `mcq_answer`
WHERE examid=10
GROUP BY `setcode`

尝试:

SELECT A.setcode, 
COUNT(CASE WHEN B.answer ='X' THEN B.answer ELSE NULL END) as count_x
FROM
(SELECT DISTINCT setcode FROM YOUR_TABLE) A
LEFT JOIN
YOUR_TABLE B
ON A.setcode = B.setcode
GROUP BY A.setcode;

它也适用于setcode动态值setcode

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM