2017-10-04 47 views
0

有两个表问题和答案。问题包含65个问题(其他方式65行)由问题的quiestionid和correcAnswer组成。答案表包含用户和用户的答案计算具有不同表格的列中的某些值的计数

我的经理让我建立这样的查询,应该告诉我们; 为每个问题有多少真实答案和错误答案。 答案总数的百分比(trueAnswerCount/answersCount)

还有一些人,我处理了他们,但上面的人很难,这是我迄今为止的尝试;

select SoruId as QuestionID, userId, UserAnswer, oss.CorrectAnswer, 
case 
    When UserAnswer = CorrectAnswer Then 'TRUE' 
    else 'FALSE' 
end 
from OnlineSinav.Cevap osc 
join OnlineSinav.Soru oss on osc.SoruId=oss.ID; 

这给了我下面的结果: enter image description here

从上面所有的结果我需要的总真实计数和每个QuestionNo伪计数,用户ID告诉我,只有当问题的新65行属于新用户,所以我不需要它,但其令人毛骨悚然我怎么能实现这个?使用

回答

2

以下SqlZim回答您所需要的聚合,QuestionNo

select 
    QuestionNo = osc.SoruId 
    , TrueCount = sum(case when UserAnswer = CorrectAnswer then 1 else 0 end) 
    , FalseCount = sum(case when UserAnswer = CorrectAnswer then 0 else 1 end) 
    , TruePercent = 100.0 * avg(case when UserAnswer = CorrectAnswer then 1.0 else 0.0 end) 
    , FalsePercent = 100.0 * avg(case when UserAnswer = CorrectAnswer then 0.0 else 1.0 end) 
from OnlineSinav.Cevap osc 
inner join OnlineSinav.Soru oss 
    on osc.SoruId=oss.ID 
group by osc.SoruId 
+0

Aaand你能帮助我找到每个问题的真假计数比率吗?我为另一列添加了这个,但现在工作; “,(100 * TrueCount/FalseCount)作为比例” – TyForHelpDude

+1

不认真采取反对票。你必须和他们一起生活,接受并继续前进。 –

+0

是的,谢谢胡安我在这里,因为这里比你更喜欢你。 – TyForHelpDude

1

有条件聚集:

select 
    TrueCount = sum(case when UserAnswer = CorrectAnswer then 1 else 0 end) 
    , FalseCount = sum(case when UserAnswer = CorrectAnswer then 0 else 1 end) 
from OnlineSinav.Cevap osc 
    inner join OnlineSinav.Soru oss 
    on osc.SoruId=oss.ID; 
+0

你忘了问题的汇总。 –

+0

@JuanCarlosOropeza我认为你是对的,你可以提供详细信息,谢谢 – TyForHelpDude

+0

@JuanCarlosOropeza Ack,这就是我得到的消息。 – SqlZim

相关问题