2011-05-17 12 views
5

Estoy construyendo una consulta en mysql 5.0 para calcular una calificación de semestre de estudiante. La tabla inicial (studentItemGrades) contiene la lista de asignaciones, etc., que se usará para calcular la calificación final. Cada tarea tiene una PossibleScore, Grade y Weight. El cálculo debe agrupar todos los elementos ponderados de forma similar y proporcionar SUM (GRADE)/SUM (POSSIBLESCORE) en función de un intervalo de fechas de vencimiento de la asignación. El problema que estoy enfrentando es la suma final de todas las calificaciones ponderadas individuales. Por ejemplo, los resultados actualmente producen los siguientes:MYSQL Resultados de suma de un cálculo

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 

de la consulta:

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 

La pregunta: ¿Cómo ahora suma los tres resultados en la salida WeighedGrade? Y, por cierto, esto es parte de una consulta mucho más grande para calcular todas las calificaciones para todos los cursos en un campus en particular.

Gracias de antemano por su ayuda.

Respuesta

8

Se puede utilizar una subconsulta, así:

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

Good lord! Gracias JL. Estaba intentando todo por lo obvio. –

+0

La consulta debe terminar con "como t1", ¿verdad? – user43326

1

Con el fin de sumar los tres resultados, lo que se necesita para volver a consultar los resultados de este selecto utilizando otro selecto con un grupo de. Esto se puede hacer utilizando una sola instrucción sql mediante el uso de subconsultas.

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

Sí, eso es todo. Gracias RX –

Cuestiones relacionadas