Mysql IF条件下的空值计数

Mysql IF条件下的空值计数,mysql,sql,count,group-by,sum,Mysql,Sql,Count,Group By,Sum,我有一个疑问: SELECT SUM(IF(b.correct = 1,1,0)) correct_answers, SUM(IF(b.correct != 1,1,0)) incorrect_answers, SUM(IF(a.answer IS NULL) 1,0)) as no_answers, a.ID FROM `a` join b on a.answer = b.id where a.created_at between

我有一个疑问:

    SELECT 

    SUM(IF(b.correct = 1,1,0)) correct_answers,
    SUM(IF(b.correct != 1,1,0)) incorrect_answers,
    SUM(IF(a.answer IS NULL) 1,0)) as no_answers,
    a.ID
    FROM `a` join b on a.answer  = b.id 
    where a.created_at between '2014-06-10' and '2014-06-17' 
    group by a.ID order by correct_answers desc
基本上,我试图获取每个用户测验的正确答案、错误答案和无答案的数量。所以我得到了正确和错误的计数。但当我试图计算没有答案的数量(表a中的答案列为NULL)时,我得到的都是零。此查询有问题吗?

请尝试以下操作:

SELECT SUM(b.correct = 1) correct_answers,
       SUM(b.correct != 1) incorrect_answers,
       SUM(a.answer IS NULL) AS no_answers,
       a.ID
FROM a 
LEFT JOIN b ON a.answer = b.id 
WHERE a.created_at BETWEEN '2014-06-10' AND '2014-06-17' 
GROUP BY a.ID 
ORDER BY SUM(b.correct = 1) DESC;

你错过了第三行

更改:

 SUM(IF(a.answer IS NULL) 1,0)) as no_answers,
致:

像这样改正

SUM(IF(a.answer IS NULL), 1,0)) as no_answers
而不是

SUM(IF(a.answer IS NULL) 1,0)) as no_answers

您的查询看起来与您描述的内容相符。下面是一个可能的简化以及
左连接

SELECT SUM(b.correct = 1) correct_answers,
       SUM(b.correct <> 1) incorrect_answers,
       SUM(a.answer IS NULL) as no_answers,
       a.ID
FROM `a` left join
      b
      on a.answer  = b.id 
where a.created_at between '2014-06-10' and '2014-06-17' 
group by a.ID
order by correct_answers desc;
选择总和(b.correct=1)正确答案,
总和(b.正确1)错误答案,
SUM(a.答案为空)作为no_答案,
a、 身份证
从'a'左连接
B
关于a.answer=b.id
其中a.在“2014-06-10”和“2014-06-17”之间创建了_
按a.ID分组
按正确答案顺序说明;
MySQL中不需要
if
语句。

选择
SELECT 
SUM(IF(b.correct = 1,1,0)) correct_answers,
SUM(IF(b.correct != 1,1,0)) incorrect_answers,
SUM(IF(a.answer IS NULL,1,0)) as no_answers,     <-- You missed a comma here. So, it was always evaluating to 0.
a.ID
FROM `a` join b on a.answer  = b.id 
where a.created_at between '2014-06-10' and '2014-06-17' 
group by a.ID order by correct_answers desc
总和(如果(b.correct=1,1,0))正确答案, 总和(如果(b.正确!=1,1,0))回答不正确,
SUM(如果(a.answer为NULL,1,0))作为no_答案,在
SUM中缺少逗号和括号(如果((a.answer为NULL,1,0))
可以显示您的数据库结构。您正在将表a与列answer联接,因此联接已排除空值。SUM(a.answer为NULL)是完美的:)
SELECT 
SUM(IF(b.correct = 1,1,0)) correct_answers,
SUM(IF(b.correct != 1,1,0)) incorrect_answers,
SUM(IF(a.answer IS NULL,1,0)) as no_answers,     <-- You missed a comma here. So, it was always evaluating to 0.
a.ID
FROM `a` join b on a.answer  = b.id 
where a.created_at between '2014-06-10' and '2014-06-17' 
group by a.ID order by correct_answers desc