Sql 如何计算db字段中的标记数
下面有一个问题,我的问题是如何将属于特定StudentId和QuestionId的所有Sql 如何计算db字段中的标记数,sql,database,Sql,Database,下面有一个问题,我的问题是如何将属于特定StudentId和QuestionId的所有学生分数一起计算并显示出来 例如: 学生答题表: StudentAnswerId (PK auto) QuestionId (Fk Question) StudentId (Fk Student) StudentMarks 1 72 39 2 2
学生分数一起计算并显示出来
例如:
学生答题表:
StudentAnswerId (PK auto) QuestionId (Fk Question) StudentId (Fk Student) StudentMarks
1 72 39 2
2 73 39 2
3 73 39 1
4 73 39 0
5 72 40 0
6 73 40 0
7 73 40 1
8 73 40 2
现在,如果我运行下面的查询:
SELECT
sa.StudentId, q.QuestionId,
GROUP_CONCAT(DISTINCT StudentAnswer ORDER BY StudentAnswer SEPARATOR ',') AS StudentAnswer, StudentMark
FROM Student st
INNER JOIN Student_Answer sa ON (st.StudentId = sa.StudentId)
INNER JOIN Student_Response sr ON (sa.StudentId = sr.StudentId) AND sa.QuestionId = sr.QuestionId
INNER JOIN Question q ON (sa.QuestionId = q.QuestionId)
INNER JOIN Answer an ON q.QuestionId = an.QuestionId
WHERE q.SessionId = 27
GROUP BY sa.StudentId, q.QuestionId
ORDER BY StudentAlias, q.SessionId, QuestionNo
它显示以下内容:
StudentId QuestionId StudentAnswer StudentMark
39 72 C 0
39 73 A,C,E 0
40 72 D 2
40 73 B,C,D 2
但是学生分数的计数不正确,应该是:
StudentId QuestionId StudentAnswer StudentMark
39 72 C 2
39 73 A,C,E 3
40 72 D 0
40 73 B,C,D 3
更新:
SELECT
sa.StudentId, StudentAlias, StudentForename, StudentSurname, q.SessionId,
QuestionNo, QuestionContent, o.OptionType, q.NoofAnswers,
GROUP_CONCAT( DISTINCT Answer ORDER BY Answer SEPARATOR ',' ) AS Answer, r.ReplyType, QuestionMarks,
GROUP_CONCAT(DISTINCT StudentAnswer ORDER BY StudentAnswer SEPARATOR ',') AS StudentAnswer, ResponseTime, MouseClick,
SUM(StudentMark) AS SumStudentMarks
FROM Student st
INNER JOIN Student_Answer sa ON (st.StudentId = sa.StudentId)
INNER JOIN Student_Response sr ON (sa.StudentId = sr.StudentId) AND sa.QuestionId = sr.QuestionId
INNER JOIN Question q ON (sa.QuestionId = q.QuestionId)
INNER JOIN Answer an ON q.QuestionId = an.QuestionId
LEFT JOIN Reply r ON q.ReplyId = r.ReplyId
LEFT JOIN Option_Table o ON q.OptionId = o.OptionId
GROUP BY StudentId,QuestionId
Student - Student_Answer (StudentId)
Student - Student_Response (StudentId)
Student_Answer - Question (QuestionId)
Student_Response - Question (QuestionId)
Question - Answer (QuestionId)
Question - Reply (ReplyId)
Question - Option_Table (OptionId)
StudentId (PK auto) StudentForename StudentSurname
39 Luke McFadzen
40 Chris Tucker
StudentAnswerId (PK auto) QuestionId (FK Question) StudentAnswer StudentId (FK student)
1 72 D 39
2 73 B 39
3 73 C 39
4 73 D 39
5 72 C 40
6 73 A 40
7 73 C 40
8 73 E 40
StudentResponseId (PK auto) QuestionId (FK Question) ResponseTime StudentId (FK student)
1 72 00:00:05 39
2 73 00:00:15 39
3 72 00:00:09 40
4 73 00:00:26 40
QuestionId (PK auto) QuestionNo SessionId (FK Session) ReplyId (FK Reply) OptionId (FK Option)
72 1 23 1 3
73 2 23 2 7
AnswerId (PK auto) QuestionId (FK Question) Answer
1 72 C
2 73 A
3 73 C
4 73 D
ReplyId (PK auto) ReplyType
1 Single
2 Multiple
ReplyId (PK auto) ReplyType
1 A-C
2 A-D
3 A-E
4 A-F
5 A-G
6 A-H
7 A-I
8 A-J
以下是表格列表:
学生:
SELECT
sa.StudentId, StudentAlias, StudentForename, StudentSurname, q.SessionId,
QuestionNo, QuestionContent, o.OptionType, q.NoofAnswers,
GROUP_CONCAT( DISTINCT Answer ORDER BY Answer SEPARATOR ',' ) AS Answer, r.ReplyType, QuestionMarks,
GROUP_CONCAT(DISTINCT StudentAnswer ORDER BY StudentAnswer SEPARATOR ',') AS StudentAnswer, ResponseTime, MouseClick,
SUM(StudentMark) AS SumStudentMarks
FROM Student st
INNER JOIN Student_Answer sa ON (st.StudentId = sa.StudentId)
INNER JOIN Student_Response sr ON (sa.StudentId = sr.StudentId) AND sa.QuestionId = sr.QuestionId
INNER JOIN Question q ON (sa.QuestionId = q.QuestionId)
INNER JOIN Answer an ON q.QuestionId = an.QuestionId
LEFT JOIN Reply r ON q.ReplyId = r.ReplyId
LEFT JOIN Option_Table o ON q.OptionId = o.OptionId
GROUP BY StudentId,QuestionId
Student - Student_Answer (StudentId)
Student - Student_Response (StudentId)
Student_Answer - Question (QuestionId)
Student_Response - Question (QuestionId)
Question - Answer (QuestionId)
Question - Reply (ReplyId)
Question - Option_Table (OptionId)
StudentId (PK auto) StudentForename StudentSurname
39 Luke McFadzen
40 Chris Tucker
StudentAnswerId (PK auto) QuestionId (FK Question) StudentAnswer StudentId (FK student)
1 72 D 39
2 73 B 39
3 73 C 39
4 73 D 39
5 72 C 40
6 73 A 40
7 73 C 40
8 73 E 40
StudentResponseId (PK auto) QuestionId (FK Question) ResponseTime StudentId (FK student)
1 72 00:00:05 39
2 73 00:00:15 39
3 72 00:00:09 40
4 73 00:00:26 40
QuestionId (PK auto) QuestionNo SessionId (FK Session) ReplyId (FK Reply) OptionId (FK Option)
72 1 23 1 3
73 2 23 2 7
AnswerId (PK auto) QuestionId (FK Question) Answer
1 72 C
2 73 A
3 73 C
4 73 D
ReplyId (PK auto) ReplyType
1 Single
2 Multiple
ReplyId (PK auto) ReplyType
1 A-C
2 A-D
3 A-E
4 A-F
5 A-G
6 A-H
7 A-I
8 A-J
学生回答:
SELECT
sa.StudentId, StudentAlias, StudentForename, StudentSurname, q.SessionId,
QuestionNo, QuestionContent, o.OptionType, q.NoofAnswers,
GROUP_CONCAT( DISTINCT Answer ORDER BY Answer SEPARATOR ',' ) AS Answer, r.ReplyType, QuestionMarks,
GROUP_CONCAT(DISTINCT StudentAnswer ORDER BY StudentAnswer SEPARATOR ',') AS StudentAnswer, ResponseTime, MouseClick,
SUM(StudentMark) AS SumStudentMarks
FROM Student st
INNER JOIN Student_Answer sa ON (st.StudentId = sa.StudentId)
INNER JOIN Student_Response sr ON (sa.StudentId = sr.StudentId) AND sa.QuestionId = sr.QuestionId
INNER JOIN Question q ON (sa.QuestionId = q.QuestionId)
INNER JOIN Answer an ON q.QuestionId = an.QuestionId
LEFT JOIN Reply r ON q.ReplyId = r.ReplyId
LEFT JOIN Option_Table o ON q.OptionId = o.OptionId
GROUP BY StudentId,QuestionId
Student - Student_Answer (StudentId)
Student - Student_Response (StudentId)
Student_Answer - Question (QuestionId)
Student_Response - Question (QuestionId)
Question - Answer (QuestionId)
Question - Reply (ReplyId)
Question - Option_Table (OptionId)
StudentId (PK auto) StudentForename StudentSurname
39 Luke McFadzen
40 Chris Tucker
StudentAnswerId (PK auto) QuestionId (FK Question) StudentAnswer StudentId (FK student)
1 72 D 39
2 73 B 39
3 73 C 39
4 73 D 39
5 72 C 40
6 73 A 40
7 73 C 40
8 73 E 40
StudentResponseId (PK auto) QuestionId (FK Question) ResponseTime StudentId (FK student)
1 72 00:00:05 39
2 73 00:00:15 39
3 72 00:00:09 40
4 73 00:00:26 40
QuestionId (PK auto) QuestionNo SessionId (FK Session) ReplyId (FK Reply) OptionId (FK Option)
72 1 23 1 3
73 2 23 2 7
AnswerId (PK auto) QuestionId (FK Question) Answer
1 72 C
2 73 A
3 73 C
4 73 D
ReplyId (PK auto) ReplyType
1 Single
2 Multiple
ReplyId (PK auto) ReplyType
1 A-C
2 A-D
3 A-E
4 A-F
5 A-G
6 A-H
7 A-I
8 A-J
学生回答:
SELECT
sa.StudentId, StudentAlias, StudentForename, StudentSurname, q.SessionId,
QuestionNo, QuestionContent, o.OptionType, q.NoofAnswers,
GROUP_CONCAT( DISTINCT Answer ORDER BY Answer SEPARATOR ',' ) AS Answer, r.ReplyType, QuestionMarks,
GROUP_CONCAT(DISTINCT StudentAnswer ORDER BY StudentAnswer SEPARATOR ',') AS StudentAnswer, ResponseTime, MouseClick,
SUM(StudentMark) AS SumStudentMarks
FROM Student st
INNER JOIN Student_Answer sa ON (st.StudentId = sa.StudentId)
INNER JOIN Student_Response sr ON (sa.StudentId = sr.StudentId) AND sa.QuestionId = sr.QuestionId
INNER JOIN Question q ON (sa.QuestionId = q.QuestionId)
INNER JOIN Answer an ON q.QuestionId = an.QuestionId
LEFT JOIN Reply r ON q.ReplyId = r.ReplyId
LEFT JOIN Option_Table o ON q.OptionId = o.OptionId
GROUP BY StudentId,QuestionId
Student - Student_Answer (StudentId)
Student - Student_Response (StudentId)
Student_Answer - Question (QuestionId)
Student_Response - Question (QuestionId)
Question - Answer (QuestionId)
Question - Reply (ReplyId)
Question - Option_Table (OptionId)
StudentId (PK auto) StudentForename StudentSurname
39 Luke McFadzen
40 Chris Tucker
StudentAnswerId (PK auto) QuestionId (FK Question) StudentAnswer StudentId (FK student)
1 72 D 39
2 73 B 39
3 73 C 39
4 73 D 39
5 72 C 40
6 73 A 40
7 73 C 40
8 73 E 40
StudentResponseId (PK auto) QuestionId (FK Question) ResponseTime StudentId (FK student)
1 72 00:00:05 39
2 73 00:00:15 39
3 72 00:00:09 40
4 73 00:00:26 40
QuestionId (PK auto) QuestionNo SessionId (FK Session) ReplyId (FK Reply) OptionId (FK Option)
72 1 23 1 3
73 2 23 2 7
AnswerId (PK auto) QuestionId (FK Question) Answer
1 72 C
2 73 A
3 73 C
4 73 D
ReplyId (PK auto) ReplyType
1 Single
2 Multiple
ReplyId (PK auto) ReplyType
1 A-C
2 A-D
3 A-E
4 A-F
5 A-G
6 A-H
7 A-I
8 A-J
问题:
SELECT
sa.StudentId, StudentAlias, StudentForename, StudentSurname, q.SessionId,
QuestionNo, QuestionContent, o.OptionType, q.NoofAnswers,
GROUP_CONCAT( DISTINCT Answer ORDER BY Answer SEPARATOR ',' ) AS Answer, r.ReplyType, QuestionMarks,
GROUP_CONCAT(DISTINCT StudentAnswer ORDER BY StudentAnswer SEPARATOR ',') AS StudentAnswer, ResponseTime, MouseClick,
SUM(StudentMark) AS SumStudentMarks
FROM Student st
INNER JOIN Student_Answer sa ON (st.StudentId = sa.StudentId)
INNER JOIN Student_Response sr ON (sa.StudentId = sr.StudentId) AND sa.QuestionId = sr.QuestionId
INNER JOIN Question q ON (sa.QuestionId = q.QuestionId)
INNER JOIN Answer an ON q.QuestionId = an.QuestionId
LEFT JOIN Reply r ON q.ReplyId = r.ReplyId
LEFT JOIN Option_Table o ON q.OptionId = o.OptionId
GROUP BY StudentId,QuestionId
Student - Student_Answer (StudentId)
Student - Student_Response (StudentId)
Student_Answer - Question (QuestionId)
Student_Response - Question (QuestionId)
Question - Answer (QuestionId)
Question - Reply (ReplyId)
Question - Option_Table (OptionId)
StudentId (PK auto) StudentForename StudentSurname
39 Luke McFadzen
40 Chris Tucker
StudentAnswerId (PK auto) QuestionId (FK Question) StudentAnswer StudentId (FK student)
1 72 D 39
2 73 B 39
3 73 C 39
4 73 D 39
5 72 C 40
6 73 A 40
7 73 C 40
8 73 E 40
StudentResponseId (PK auto) QuestionId (FK Question) ResponseTime StudentId (FK student)
1 72 00:00:05 39
2 73 00:00:15 39
3 72 00:00:09 40
4 73 00:00:26 40
QuestionId (PK auto) QuestionNo SessionId (FK Session) ReplyId (FK Reply) OptionId (FK Option)
72 1 23 1 3
73 2 23 2 7
AnswerId (PK auto) QuestionId (FK Question) Answer
1 72 C
2 73 A
3 73 C
4 73 D
ReplyId (PK auto) ReplyType
1 Single
2 Multiple
ReplyId (PK auto) ReplyType
1 A-C
2 A-D
3 A-E
4 A-F
5 A-G
6 A-H
7 A-I
8 A-J
回答:
SELECT
sa.StudentId, StudentAlias, StudentForename, StudentSurname, q.SessionId,
QuestionNo, QuestionContent, o.OptionType, q.NoofAnswers,
GROUP_CONCAT( DISTINCT Answer ORDER BY Answer SEPARATOR ',' ) AS Answer, r.ReplyType, QuestionMarks,
GROUP_CONCAT(DISTINCT StudentAnswer ORDER BY StudentAnswer SEPARATOR ',') AS StudentAnswer, ResponseTime, MouseClick,
SUM(StudentMark) AS SumStudentMarks
FROM Student st
INNER JOIN Student_Answer sa ON (st.StudentId = sa.StudentId)
INNER JOIN Student_Response sr ON (sa.StudentId = sr.StudentId) AND sa.QuestionId = sr.QuestionId
INNER JOIN Question q ON (sa.QuestionId = q.QuestionId)
INNER JOIN Answer an ON q.QuestionId = an.QuestionId
LEFT JOIN Reply r ON q.ReplyId = r.ReplyId
LEFT JOIN Option_Table o ON q.OptionId = o.OptionId
GROUP BY StudentId,QuestionId
Student - Student_Answer (StudentId)
Student - Student_Response (StudentId)
Student_Answer - Question (QuestionId)
Student_Response - Question (QuestionId)
Question - Answer (QuestionId)
Question - Reply (ReplyId)
Question - Option_Table (OptionId)
StudentId (PK auto) StudentForename StudentSurname
39 Luke McFadzen
40 Chris Tucker
StudentAnswerId (PK auto) QuestionId (FK Question) StudentAnswer StudentId (FK student)
1 72 D 39
2 73 B 39
3 73 C 39
4 73 D 39
5 72 C 40
6 73 A 40
7 73 C 40
8 73 E 40
StudentResponseId (PK auto) QuestionId (FK Question) ResponseTime StudentId (FK student)
1 72 00:00:05 39
2 73 00:00:15 39
3 72 00:00:09 40
4 73 00:00:26 40
QuestionId (PK auto) QuestionNo SessionId (FK Session) ReplyId (FK Reply) OptionId (FK Option)
72 1 23 1 3
73 2 23 2 7
AnswerId (PK auto) QuestionId (FK Question) Answer
1 72 C
2 73 A
3 73 C
4 73 D
ReplyId (PK auto) ReplyType
1 Single
2 Multiple
ReplyId (PK auto) ReplyType
1 A-C
2 A-D
3 A-E
4 A-F
5 A-G
6 A-H
7 A-I
8 A-J
回复:
SELECT
sa.StudentId, StudentAlias, StudentForename, StudentSurname, q.SessionId,
QuestionNo, QuestionContent, o.OptionType, q.NoofAnswers,
GROUP_CONCAT( DISTINCT Answer ORDER BY Answer SEPARATOR ',' ) AS Answer, r.ReplyType, QuestionMarks,
GROUP_CONCAT(DISTINCT StudentAnswer ORDER BY StudentAnswer SEPARATOR ',') AS StudentAnswer, ResponseTime, MouseClick,
SUM(StudentMark) AS SumStudentMarks
FROM Student st
INNER JOIN Student_Answer sa ON (st.StudentId = sa.StudentId)
INNER JOIN Student_Response sr ON (sa.StudentId = sr.StudentId) AND sa.QuestionId = sr.QuestionId
INNER JOIN Question q ON (sa.QuestionId = q.QuestionId)
INNER JOIN Answer an ON q.QuestionId = an.QuestionId
LEFT JOIN Reply r ON q.ReplyId = r.ReplyId
LEFT JOIN Option_Table o ON q.OptionId = o.OptionId
GROUP BY StudentId,QuestionId
Student - Student_Answer (StudentId)
Student - Student_Response (StudentId)
Student_Answer - Question (QuestionId)
Student_Response - Question (QuestionId)
Question - Answer (QuestionId)
Question - Reply (ReplyId)
Question - Option_Table (OptionId)
StudentId (PK auto) StudentForename StudentSurname
39 Luke McFadzen
40 Chris Tucker
StudentAnswerId (PK auto) QuestionId (FK Question) StudentAnswer StudentId (FK student)
1 72 D 39
2 73 B 39
3 73 C 39
4 73 D 39
5 72 C 40
6 73 A 40
7 73 C 40
8 73 E 40
StudentResponseId (PK auto) QuestionId (FK Question) ResponseTime StudentId (FK student)
1 72 00:00:05 39
2 73 00:00:15 39
3 72 00:00:09 40
4 73 00:00:26 40
QuestionId (PK auto) QuestionNo SessionId (FK Session) ReplyId (FK Reply) OptionId (FK Option)
72 1 23 1 3
73 2 23 2 7
AnswerId (PK auto) QuestionId (FK Question) Answer
1 72 C
2 73 A
3 73 C
4 73 D
ReplyId (PK auto) ReplyType
1 Single
2 Multiple
ReplyId (PK auto) ReplyType
1 A-C
2 A-D
3 A-E
4 A-F
5 A-G
6 A-H
7 A-I
8 A-J
选项\u表:
SELECT
sa.StudentId, StudentAlias, StudentForename, StudentSurname, q.SessionId,
QuestionNo, QuestionContent, o.OptionType, q.NoofAnswers,
GROUP_CONCAT( DISTINCT Answer ORDER BY Answer SEPARATOR ',' ) AS Answer, r.ReplyType, QuestionMarks,
GROUP_CONCAT(DISTINCT StudentAnswer ORDER BY StudentAnswer SEPARATOR ',') AS StudentAnswer, ResponseTime, MouseClick,
SUM(StudentMark) AS SumStudentMarks
FROM Student st
INNER JOIN Student_Answer sa ON (st.StudentId = sa.StudentId)
INNER JOIN Student_Response sr ON (sa.StudentId = sr.StudentId) AND sa.QuestionId = sr.QuestionId
INNER JOIN Question q ON (sa.QuestionId = q.QuestionId)
INNER JOIN Answer an ON q.QuestionId = an.QuestionId
LEFT JOIN Reply r ON q.ReplyId = r.ReplyId
LEFT JOIN Option_Table o ON q.OptionId = o.OptionId
GROUP BY StudentId,QuestionId
Student - Student_Answer (StudentId)
Student - Student_Response (StudentId)
Student_Answer - Question (QuestionId)
Student_Response - Question (QuestionId)
Question - Answer (QuestionId)
Question - Reply (ReplyId)
Question - Option_Table (OptionId)
StudentId (PK auto) StudentForename StudentSurname
39 Luke McFadzen
40 Chris Tucker
StudentAnswerId (PK auto) QuestionId (FK Question) StudentAnswer StudentId (FK student)
1 72 D 39
2 73 B 39
3 73 C 39
4 73 D 39
5 72 C 40
6 73 A 40
7 73 C 40
8 73 E 40
StudentResponseId (PK auto) QuestionId (FK Question) ResponseTime StudentId (FK student)
1 72 00:00:05 39
2 73 00:00:15 39
3 72 00:00:09 40
4 73 00:00:26 40
QuestionId (PK auto) QuestionNo SessionId (FK Session) ReplyId (FK Reply) OptionId (FK Option)
72 1 23 1 3
73 2 23 2 7
AnswerId (PK auto) QuestionId (FK Question) Answer
1 72 C
2 73 A
3 73 C
4 73 D
ReplyId (PK auto) ReplyType
1 Single
2 Multiple
ReplyId (PK auto) ReplyType
1 A-C
2 A-D
3 A-E
4 A-F
5 A-G
6 A-H
7 A-I
8 A-J
SUM(StudentMark)
而不仅仅是StudentMark
嗨,我没有得到正确的数字,但是,对于学生分数,它不是2,3,03
,而是0,9,2,9
?你的表格结构不清楚。SUM()的工作原理如下:似乎您的联接没有很好地组织。我包括了显示完整查询、每个表的关联方式以及每个表中的数据的更新。一旦你能解决这个我知道你会解决的小问题,我就会删除更新:)嗨,你对此有什么想法吗?试着使用子查询而不是连接所有表。如果您可以在SQLFIDLE中准备方案,那么它将很容易显示。