Примеры записей:
examid setcode answer
------- -------- --------
10 A A
10 A B
10 A X
10 B A
10 B B
10 B C
Я пытаюсь найти группу подсчета с помощью setcode, где ответом является 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
Здесь здесь используется динамический код. Я упомянул только А и В. Может быть больше setocdes как C, D, E, F и т.д. Как я могу это сделать. Я использую MySQL
Вы можете использовать SUM + IF
для получения этого результата:
SELECT 'setCode', SUM(if ('answer'='X', 1,0)) as answer
FROM 'mcq_answer'
WHERE examid=10
GROUP BY 'setcode'
вы можете использовать ниже запрос
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
Пытаться:
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
.