带计数的SQL多重联接

带计数的SQL多重联接,sql,join,count,Sql,Join,Count,我有三张桌子: FORM(id) QUESTION(id, form_id, text) --> X questions for a form ANSWER(id, question_id, answer_number, text) --> X answers for a question 我还提供了一个表格,供用户回答: USERS_ANSWERS(id, question_id, answer_number) 我想为每个问题提供答案中给出的计数,如: 问题编号、答案编号

我有三张桌子:

FORM(id)

QUESTION(id, form_id, text)  --> X questions for a form

ANSWER(id, question_id, answer_number, text) --> X answers for a question
我还提供了一个表格,供用户回答:

USERS_ANSWERS(id, question_id, answer_number)
我想为每个问题提供答案中给出的计数,如:

问题编号、答案编号、计数(用户回答此问题)

如果没有答案,则计数=0

你能帮我吗?花了我几个小时,我还是一无所有(


PS:是的,我知道,为什么我不在用户答案中使用答案id?我不知道,这不是我的数据库…

你只需按(问题id,答案编号)分组,然后计数

select 
question_id, answer_number, count(answer_number) as count
from user_answers 
group by question_id, answer_number
order by question_id, answer_number
您需要从
USERS\u ANSWERS
表中获取其他两个表中每个问题和答案记录的计数

下面是一个这样做的示例,同时返回所有问题,即使这些问题没有答案:

select qst.id                       as 'question_id',
       isnull(ans.answer_number, 0) as 'answer_number',  -- isnull here because not all questions might have answers
       isnull((select count(1)
                 from USERS_ANSWERS usa
                where usa.question_id   = qst.id
                  and usa.answer_number = ans.answer_number), 0) as 'total user answers'
  from QUESTION qst
         left outer join -- left outer join here because not all questions might have answers
       ANSWER   ans on ans.question_id = qst.id

一个简单的连接就可以了

SELECT q.id question_id, a.answer_number, COUNT(ua.id) answer_count
FROM question q
JOIN answer a 
  ON q.id = a.question_id
LEFT JOIN users_answers ua 
  ON q.id = ua.question_id AND a.answer_number = ua.answer_number
GROUP BY q.id, a.answer_number
ORDER BY q.id, a.answer_number
第一个连接将所有问题及其答案组合在一起,以获得所有有效的组合。下面的左连接计算所有组合的所有答案,允许零计数


.

发布一点SQL努力。添加一个带有used DBMST的标记。当问题陈述时,这永远不会给出count=0。