Подсчет нулевых значений в MYSQL - PullRequest
5 голосов
/ 02 августа 2010

Как подсчитать нулевые значения при создании запроса кросс-таблицы?

У меня есть таблица с тремя столбцами [идентификатор, имя, ответ]

У меня есть следующие записи:

ID  NAME   ANS
1   ABC    1
1   ABC    0
1   ABC    NULL
2   XYZ    1
2   XYZ    NULL
2   XYZ    NULL
2   XYZ    1
2   XYZ    0
1   ABC    0

Теперь я хотел бы получить свой результат:

ID  Name   NULLCOUNT     TRUE COUNT   FALSE COUNT
1   ABC    1             1            2
2   XYZ    2             2            1

Я использую следующую инструкцию SQL:

select ID, NAME, 
    sum(case ANS when null then 1 else 0 end) as NULLCOUNT,
    sum(case ANS when 1 then 1 else 0 end) as TRUECOUNT,
    sum(case ANS when 0 then 1 else 0 end) as FALSECOUNT
from 
    TBL1
 Group By ID, Name

Получение моего результата:

ID  Name   NULLCOUNT     TRUE COUNT   FALSE COUNT
1   ABC    0             1            2
2   XYZ    0             2            1

Счетчик NULL получает ошибку. Почему и как я могу решить эту проблему?

Ответы [ 3 ]

7 голосов
/ 02 августа 2010

Я считаю, что вместо этого:

 sum(case ANS when null then 1 else 0 end) as NULLCOUNT

Вы должны использовать это:

 sum(case when ANS is null then 1 else 0 end) as NULLCOUNT
1 голос
/ 02 августа 2010

NULL даже не сравнивается с самим собой, вы можете использовать «СЛУЧАЙ, КОГДА ANS НЕДЕЙСТВИТЕЛЕН» (вам также не хватает GROUP BY)Или попробуйте:

select ID, NAME, 
    sum(if(ans IS NULL, 1, 0)) as NULLCOUNT,
    sum(case ANS when 1 then 1 else 0 end) as TRUECOUNT,
    sum(case ANS when 0 then 1 else 0 end) as FALSECOUNT
from 
    TBL1
group by ID,NAME
1 голос
/ 02 августа 2010

ноль -> ноль?

...