Для домашнего задания мне нужно написать запрос MySQL, чтобы вычислить средний балл каждого ученика в таблице базы данных. Я разбил задачу на 3 части: (1) вычисление количества баллов, полученных каждым учеником, (2) вычисление количества полученных баллов и затем (3) деление баллов за баллы. Вот запросы, которые я написал для шагов 1 и 2:
Рассчитать заработанные баллы:
SELECT ID, SUM( credits ) AS credits_taken
FROM takes
NATURAL JOIN course
GROUP BY ID
2 Найти заработанные баллы:
SELECT ID, SUM( credits * ( SELECT points FROM gradepoint WHERE letter = grade ) ) AS tot_grade_points
FROM takes NATURAL JOIN course
GROUP BY ID
Я вручную оценил каждый запрос, и они вернули правильные результаты. Но я не могу понять, как вернуть (credits_taken / tot_grade_points)
для каждого студента. Вот что я попробовал:
SELECT ID, GPA
FROM student AS S NATURAL JOIN
(SELECT ID,( 'credits_taken' / SUM( credits * ( SELECT points FROM gradepoint WHERE letter = grade ) )) AS GPA
FROM takes AS T1 NATURAL JOIN course
WHERE S.ID = T1.ID
AND EXISTS (
SELECT ID, SUM( credits ) AS 'credits_taken'
FROM takes AS T2 NATURAL JOIN course
WHERE S.ID = T2.ID
GROUP BY ID
)
GROUP BY ID) Z
GROUP BY ID
Но это дает мне ошибку «Неизвестный столбец« S.ID »в« предложении где »». Из того, что я прочитал, вы не можете ссылаться на псевдоним таблицы из подзапроса в операции соединения. У кого-нибудь есть другой способ выполнить вычисление этих двух подзапросов и вернуть их, привязанные к идентификатору студента?
Таблица «принимает» отображает идентификаторы учеников в информацию о курсах, которые они прошли, наиболее важно - course_id и оценку. Таблица «курс» содержит поле «кредиты», количество кредитов, которое стоит курс.
EDIT
Вот соответствующие структуры таблиц:
принимает:
Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| ID | varchar(5) | NO | PRI | | |
| course_id | varchar(8) | NO | PRI | | |
| sec_id | varchar(8) | NO | PRI | | |
| semester | varchar(6) | NO | PRI | | |
| year | decimal(4,0) | NO | PRI | 0 | |
| grade | varchar(2) | YES | | NULL | |
+-----------+--------------+------+-----+---------+-------+
курс:
+-----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| course_id | varchar(8) | NO | PRI | | |
| title | varchar(50) | YES | | NULL | |
| dept_name | varchar(20) | YES | MUL | NULL | |
| credits | decimal(2,0) | YES | | NULL | |
+-----------+--------------+------+-----+---------+-------+