2011-05-17 171 views
5

我在mysql 5.0中建立一个查询来计算学生的学期等级。初始表格(studentItemGrades)包含将用于计算最终成绩的作业列表等。每个作业都有一个PossibleScore,Grade和Weight。计算应对所有类似加权的项目进行分组,并根据分配何时到期的日期范围提供SUM(GRADE)/ SUM(POSSIBLESCORE)。我遇到的问题是所有个人加权成绩的最后总结。例如,目前的结果产生如下:MYSQL计算结果的总和

CourseScheduleID sDBID AssignedDate DueDate  Weight WeightedGrade 
1   519  2010-08-26 2010-08-30 10 0.0783333333333333 
1   519  2010-09-01 2010-09-03 20 0.176 
1   519  2010-09-01 2010-09-10 70 0.574 

从查询:

SELECT CourseScheduleID, sDBID, AssignedDate, DueDate, Weight, 
((SUM(Grade)/SUM(PossibleScore))*(Weight/100)) AS WeightedGrade 
FROM studentItemGrades 
WHERE DueDate>='2010-08-23' 
AND DueDate<='2010-09-10' 
AND CourseScheduleID=1 
AND sDBID=519 
AND Status>0 
GROUP BY Weight 

的问题:我现在该如何总和三个结果中WeighedGrade输出?顺便说一句,这是计算特定校园所有课程所有等级的更大查询的一部分。

在此先感谢您的帮助。

回答

8

您可以使用子查询,像这样:

SELECT SUM(WeightedGrade) FROM 
(
    SELECT CourseScheduleID, sDBID, AssignedDate, DueDate, Weight, 
    ((SUM(Grade)/SUM(PossibleScore))*(Weight/100)) AS WeightedGrade 
    FROM studentItemGrades 
    WHERE DueDate>='2010-08-23' 
    AND DueDate<='2010-09-10' 
    AND CourseScheduleID=1 
    AND sDBID=519 
    AND Status>0 
    GROUP BY Weight 
) t1 
+0

好主!谢谢JL。我正在通过明显的方式尝试一切。 – 2011-05-17 18:36:23

+0

查询应该以“as t1”结尾,对吧?是的,就是这样。 – user43326 2018-01-03 07:46:41

1

为了总结了三个结果,你就需要重新查询该选择的使用其他与一组由选择的结果。这可以通过使用子查询使用单个sql语句完成。

SELECT sq.CourseScheduleID, sq.sDBID, SUM(sq.WeightedGrade) as FinalGrade 
FROM 
(
    SELECT CourseScheduleID, sDBID, AssignedDate, DueDate, Weight, 
     ((SUM(Grade)/SUM (PossibleScore))*(Weight/100)) AS WeightedGrade 
    FROM studentItemGrades WHERE DueDate>='2010-08-23' AND DueDate<='2010-09-10' 
     AND CourseScheduleID=1 AND sDBID=519 AND Status>0 GROUP BY Weight 
) AS sq 
GROUP BY sq.CourseScheduleID, sq.sDBID 
+0

谢谢RX – 2011-05-17 18:43:06