我有一个带有2个表的简单数据库 -
问题&答案
都有一个问题字段,我试图通过所有答案的计数得到所有问题的列表 - 问题是有些问题没有答案。
SELECT questions.*,COUNT(answers.questionid) AS num_answers
FROM questions
LEFT JOIN answers
ON questions.questionid = answers.questionid
上面的sql给出了所有有答案的问题的计数,但是如果答案为零,那么它就不会出现在列表中。
有什么想法吗?
答案 0 :(得分:1)
还要按要选择的列进行分组
SELECT questions.id, questions.title, COUNT(answers.questionid) AS num_answers
FROM questions
LEFT JOIN answers ON questions.questionid = answers.questionid
GROUP BY questions.id, questions.title
答案 1 :(得分:1)
只需使用count(*)
:
SELECT COUNT(*) AS num_answers
FROM questions LEFT JOIN
answers
ON questions.questionid = answers.questionid
使用count(<column>)
名称时,您将计算列中非NULL值的数量。通过使用第二个表中的列,您只计算匹配。
此外,您不需要questions.*
。大多数SQL引擎都会为此返回错误。查询只返回一行,因为它是一个没有group by
的聚合查询。
编辑:
如果您希望每个问题,请使用group by
并使用answers
中的列计算匹配项:
SELECT questions.*,
COUNT(answers.questionid) as num_answers
FROM questions LEFT JOIN
answers
ON questions.questionid = answers.questionid
GROUP BY questions.questionid