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