在MySQL group by中不满足条件时显示计数0
样本记录:在MySQL group by中不满足条件时显示计数0,mysql,sql,Mysql,Sql,样本记录: examid setcode answer ------- -------- -------- 10 A A 10 A B 10 A X 10 B A 10 B B 10 B C 我试图通过设置码找到计数
examid setcode answer
------- -------- --------
10 A A
10 A B
10 A X
10 B A
10 B B
10 B C
我试图通过设置码找到计数组,答案是X。
我尝试了以下查询:
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
设置代码在这里是动态的。我只提到了A和B。可能会有更多的设置,如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+:
SELECT `setCode`, SUM(if (`answer`='X', 1,0)) as answer
FROM `mcq_answer`
WHERE examid=10
GROUP BY `setcode`
尝试:
它也适用于setcode的动态值集。setcode在这里是动态的。我只提到了A和B。可能会有更多的设置,如C、D、E、F等。对不起,我没有提到。我已经编辑了我的问题@Hasmukh Viradiyat该查询也适用于动态设置代码。你试过这个问题吗?我没有查询像A和B这样的固定集合码,每个集合码总共有80行,其中集合码A包含2个“X”答案,集合码B包含4个“X”答案,集合码C没有“X”答案。查询返回以下结果:对于设置代码A,计数为160;对于设置代码B,计数为320;对于设置代码C,计数为0。我认为总行数乘以每个setocode@Hasmukh Viradiya的计数
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;