Следующий запрос дает разные результаты в разных строках, и он должен давать одинаковый результат во всех строках.
Вот запрос:
select * from
(SELECT mjla_db.StudentRecordTable2.studentId,
mjla_db.StudentTable2.lastName as `Last Name`,
mjla_db.StudentTable2.firstName as `First Name`,
sum(if(quizId=60,quizGrade,0)) as `Quiz 60`,
sum(if(quizId=64,quizGrade,0)) as `Quiz 64`,
sum(if(quizId=71,quizGrade,0)) as `Quiz 71`,
(sum(quizGrade*(1-abs(sign(quizId-60)))) +
sum(quizGrade*(1-abs(sign(quizId-64)))) +
sum(quizGrade*(1-abs(sign(quizId-71)))) )/3
as Averages
FROM mjla_db.StudentRecordTable2, mjla_db.StudentTable2
where (mjla_db.StudentRecordTable2.studentId=mjla_db.StudentTable2.studentId)
GROUP BY studentId) as A
where A.studentId
in (select mjla_db.ClassStudentTable2.studentId
from mjla_db.ClassStudentTable2
where mjla_db.ClassStudentTable2.classId='CS3071F2011');
ЧислоТесты являются динамическими, число студентов является динамическим.
Вот содержимое таблицы, где mjla_db.StudentRecordTable2.classId='CS3071F2011'
.
+-------------+-----------+-----------+--------+
| classId | studentId | quizGrade | quizId |
+-------------+-----------+-----------+--------+
| CS3071F2011 | A1 | NULL | 60 |
| CS3071F2011 | A2 | NULL | 60 |
| CS3071F2011 | A5 | NULL | 60 |
| CS3071F2011 | A1 | NULL | 64 |
| CS3071F2011 | A2 | NULL | 64 |
| CS3071F2011 | A5 | NULL | 64 |
| CS3071F2011 | A7 | NULL | 64 |
| CS3071F2011 | A3 | NULL | 64 |
| CS3071F2011 | A4 | NULL | 64 |
| CS3071F2011 | A3 | NULL | 60 |
| CS3071F2011 | A4 | NULL | 60 |
| CS3071F2011 | A7 | NULL | 60 |
| CS3071F2011 | A1 | NULL | 71 |
| CS3071F2011 | A2 | NULL | 71 |
| CS3071F2011 | A5 | NULL | 71 |
| CS3071F2011 | A7 | NULL | 71 |
| CS3071F2011 | A3 | NULL | 71 |
| CS3071F2011 | A4 | NULL | 71 |
+-------------+-----------+-----------+--------+
Вот результат запроса.
+-----------+-----------+------------+---------+---------+---------+----------+
| studentId | Last Name | First Name | Quiz 60 | Quiz 64 | Quiz 71 | Averages |
+-----------+-----------+------------+---------+---------+---------+----------+
| A1 | harry | thomas | 0 | 0 | 0 | 0.0000 |
| A2 | harry | willy | 0 | 0 | 0 | 0.0000 |
| A3 | billy | gregory | 0 | 0 | 0 | 0.0000 |
| A4 | goat | bobb | 0 | 0 | 0 | 0.0000 |
| A5 | nogood | tom | 0 | 0 | 0 | NULL |
| A7 | foobar | dick | 0 | 0 | 0 | NULL |
+-----------+-----------+------------+---------+---------+---------+----------+
Ожидаемый результат запроса будет для всех средних равным 0,0000, почему последние два меняются?
Кроме того, всякий раз, когда я делаю запрос такчто я получаю только одного студента за раз, A5 и A7 по-прежнему отображаются как NULL, а остальные отображаются нормально ...
Решение этой проблемы или альтернативный запрос для достижения той же целибыть приемлемым.Моя цель состоит в том, чтобы получить таблицу, в которой каждая строка представляет представление каждого учащегося в классе и его оценки по всем тестам, а также среднее значение по всем тестам этого студента.