Показать счетчик 0, если условие не выполнено в группе MySQL

0

Примеры записей:

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

Теги:

3 ответа

0
Лучший ответ

Вы можете использовать SUM + IF для получения этого результата:

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

вы можете использовать ниже запрос

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
  • 0
    Setcode здесь динамический. Я упомянул только А и В. Там может быть больше setocdes как C, D, E, F и т. Д. Я сожалею, что не упомянул это. Я отредактировал свой вопрос @Hasmukh Viradiya
  • 0
    этот запрос также будет работать для динамического setcode. вы пробовали этот запрос? я не сделал запрос на исправление setcode, как A и B
Показать ещё 2 комментария
0

Пытаться:

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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню