我很难一起计算学生的成绩以获得最终成绩。

我有下表

Students
----------------
stu_id
stu_fname
stu_lname

Grades
----------------
grade_id
grade_name
grade_type
grade_possible

StudentGrades
-----------------
stu_grade_id
grade_id
stu_id
grade_earned

GradeTypes
----------------
grade_type
grade_type_name
grade_weight


这是我能够提出的查询

Select S.stu_fname, S.stu_lname, GT.grade_type_name,
(ROUND((SUM(SG.grade_earned)/SUM(G.grade_possible)), 2) * ROUND((GT.grade_weight/100.0)
, 2) ) as CalculatedGrade
FROM Student S
INNER JOIN StudentGrade SG on SG.stu_id = S.stu_id
INNER JOIN Grade G on SG.grade_id = G.grade_id
INNER JOIN GradeType GT WHERE G.grade_type = GT.grade_type
GROUP BY S.stu_fname, S.stu_lname, GT.grade_type_name;


我在下面得到查询报告

James | Fort | HW/QUIZ | 30.0
James | Fort | LogBook | 60.0
Robin | Hood | HW/QUIZ | 60.0
Robin | Hood | Logbook | 25.0


我希望能够将詹姆斯·福特斯(James Forts)的两个成绩加在一起以获得他的最终成绩,而罗宾汉(Robin Hood)也是如此。

感谢您的任何帮助,我仍然停留在这一点上。我快完成了。我已经研究了子查询,并且需要更多帮助来缩小搜索范围以获得答案。

最佳答案

您是否尝试过以下方法?

SELECT results.stu_fname, results.stu_lname, sum(results.CalculatedGrade)
FROM(
     SELECT S.stu_fname, S.stu_lname, GT.grade_type_name,
    (ROUND((SUM(SG.grade_earned)/SUM(G.grade_possible)), 2) * ROUND((GT.grade_weight/100.0)
    , 2) ) as CalculatedGrade
    FROM Student S
    INNER JOIN StudentGrade SG on SG.stu_id = S.stu_id
    INNER JOIN Grade G on SG.grade_id = G.grade_id
    INNER JOIN GradeType GT WHERE G.grade_type = GT.grade_type
    GROUP BY S.stu_fname, S.stu_lname, GT.grade_type_name
)results
GROUP BY results.stu_fname, results.stu_lname;


编辑:由于AshReva的评论添加了别名。

10-06 10:50
查看更多