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 に答える