1

我在下面有一个数据库示例:

会话表:

SessionId (PK auto)  SessionName
1                    SODJW

问题表:

QuestionId (PK auto)  QuestionContent  SessionId (FK) refer to Session
1                     Blah             1   
2                     Blah Blah        1
3                     Blah Blah Blah   1

Penalty_Marks 表:

PenaltyAnswerId  PenaltyMarks  QuestionId (FK) refer to Question
1                1             1
2                0             1
3                1             2
4                2             3
5                2             3

现在我想执行一个计算PenaltyMarks会话的 SQL。因此,要做到这一点,我们需要知道哪个QuestionId属于SessionId,然后计算标记。

我的问题是如何编写 SQL 以便能够在其中找到QuestionId' SessionId,然后我们可以计算罚分?我问这个的原因是因为它给了我不正确的计数值。

我的尝试:

SELECT COUNT(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 = 1; 
4

3 回答 3

3

您的查询返回行数,而不是罚分总数。您还说您需要查看每个会话的问题以及总罚分,因此您必须按会话 ID 和问题 ID 进行分组。

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
    GROUP BY s.SessionId,q.QuestionId

SQL 小提琴演示

于 2013-01-19T00:22:23.073 回答
1

我认为你想要SUM(PenaltyMarks)而不是COUNT(PentaltyMarks)你可能还需要一个GROUP BY QuestionId

我现在无法测试它。

于 2013-01-19T00:19:58.067 回答
1

Count 返回行数;您想使用sum(),它将为您添加行中的值。

于 2013-01-19T00:20:18.877 回答