Для задания домашней работы я должен написать запрос MySQL для вычисления GPA каждого ученика в таблице базы данных. Я разбил проблему на 3 части: (1) вычислил количество баллов, полученных каждым учеником, (2) вычислил количество полученных кредитов, а затем (3) разделил баллы по кредитам. Вот запросы я написал для выполнения шагов 1 и 2: точкиМанипулирование результатами из двух подзапросов в MySQL
Рассчитайте класс заработал:
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
I вручную оценили каждый запрос и вернули правильные результаты. Но я не могу понять, как вернуть (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“в„где предложение“». Из того, что я прочитал, вы не можете ссылаться на псевдоним таблицы из подзапроса в операции соединения. У кого-нибудь есть другой способ сделать расчет этих двух подзапросов и вернуть их привязанным к идентификатору студента?
Таблицы «берет» сопоставляют студенческие идентификаторы с информацией о курсах, которые они взяли, и, самое главное, курс и класс. В таблице «курс» содержится поле «кредиты», количество кредитов, которые курс стоит.
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 | |
+-----------+--------------+------+-----+---------+-------+
Какая колонка идентификатора на курсе таблицы, к которой вы хотите присоединиться, называется Takes? Это идентификатор? Было бы полезно разместить структуру столбцов из трех таблиц. – dash
Удалите апострофы из 'credits_taken' (который является строкой) в credits_taken/SUM (...) и повторите попытку. –
Когда я удаляю апострофы, он говорит Неизвестный столбец «credits_taken» в «списке полей». – Matt