2011-05-17 25 views
5

Öğrenci yarıyıl notu hesaplamak için mysql 5.0'da bir sorgu oluşturuyorum. Başlangıç ​​tablosu (studentItemGrades), son notu hesaplamak için kullanılacak ödevlerin listesini içerir. Her ödevin PossibleScore, Grade ve Weight vardır. Hesaplama, benzer ağırlıklı öğelerin tümünü gruplandırmalı ve ödevin teslim tarihinin tarih aralığına göre SUM (GRADE)/SUM (POSSIBLESCORE) değerini sağlamalıdır. Karşılaştığım problem, tüm bireysel ağırlıklı notların son toplamasıdır. sorgudanMYSQL Toplam bir hesaplama sonuçları

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 

soru: Nasıl şimdi WeighedGrade çıktıda üç sonuç SUM do Örneğin, sonuçları şu anda aşağıdaki üretmek? Bu arada, bu, belirli bir kampüsteki tüm dersler için tüm notları hesaplamak için çok daha büyük bir sorgunun bir parçasıdır.

Yardımlarınız için şimdiden teşekkür ederiz.

cevap

8

Öyle gibi bir alt sorgu kullanabilirsiniz: Üç sonuçlarını toplar amacıyla

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

İyi efendim! Teşekkürler JL. Herşeyi bariz bir şekilde deniyordum. –

+0

Sorgu "t1" ile bitmeli, değil mi? – user43326

1

, yanından bir grup ile başka bir seçme kullanarak bu seçkin sonuçlarını yeniden sorgulamak gerekir. Bu alt sorgular kullanılarak tek bir sql deyimi kullanılarak yapılabilir.

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

Evet, işte bu var. Teşekkürler RX –

İlgili konular