以下SQL查询总结了会话中每个问题的每个惩罚标记:
SELECT s.SessionId,q.QuestionId,SUM(pm.PenaltyMarks)
FROM Session s
INNER JOIN Question q ON s.SessionId = q.SessionId
INNER JOIN Penalty_Marks pm ON q.QuestionId = pm.QuestionId
WHERE (s.SessionId = 30)
GROUP BY s.SessionId,q.QuestionId
以下是输出显示的内容:
SessionId QuestionId Sum(pm.PenaltyMarks)
30 77 4
30 38 3
30 39 4
但我想要发生的事情现在总结了会议中的所有惩罚标记。因此,在上面的示例中,它将在会话30中将惩罚标记加在一起,以将总惩罚标记输出为11
。但我的问题是如何实现这一目标呢?
以下是它的样子:
SessionId TotalPenaltyMarks
30 11
答案 0 :(得分:2)
删除q.QuestionId
SELECT s.SessionId,
SUM(pm.PenaltyMarks) TotalPenaltyMarks
FROM Session s
INNER JOIN Question q ON s.SessionId = q.SessionId
INNER JOIN Penalty_Marks pm ON q.QuestionId = pm.QuestionId
WHERE s.SessionId = 30
GROUP BY s.SessionId
GROUP BY
子句已经是可选的,因为您已经过滤了特定的SessionId
。