MYSQL Сумма результатов расчета - PullRequest
5 голосов
/ 17 мая 2011

Я строю запрос в MySQL 5.0, чтобы вычислить оценку студенческого семестра. Исходная таблица (studentItemGrades) содержит список заданий и т. Д., Которые будут использоваться для расчета итоговой оценки. Каждое задание имеет возможную оценку, класс и вес. При расчете следует сгруппировать все одинаково взвешенные позиции и указать SUM (GRADE) / SUM (POSSIBLESCORE) на основе диапазона дат, когда было назначено назначение. Проблема, с которой я сталкиваюсь, заключается в окончательном суммировании всех индивидуальных взвешенных оценок. Например, результаты в настоящее время дают следующее:

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? И, кстати, это часть гораздо большего запроса для расчета всех оценок для всех курсов в определенном кампусе.

Заранее спасибо за помощь.

Ответы [ 2 ]

9 голосов
/ 17 мая 2011

Вы можете использовать подзапрос, например так:

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
1 голос
/ 17 мая 2011

Для суммирования трех результатов вам потребуется запросить результаты этого выбора, используя другой выбор с группировкой по.Это можно сделать с помощью одного оператора 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...