SQL-упражнение (1) Напишите оператор UPDATE, рассчитайте средний балл каждого учащегося и заполните его в поле avg_grade в таблице учащихся.

Основа вопроса:

Напишите оператор UPDATE, чтобы вычислить средний балл каждого учащегося, и заполните его в поле avg_grade в таблице учащихся.

Структура таблицы:

Оператор SQL, определяющий структуру таблицы, выглядит следующим образом:

CREATE TABLE student (

sno varchar(6) NOT NULL,

sname varchar(10),

sex char(2),

нация char(2),

pnum char(18),

дата рождения,

phone char(11),

dept varchar(20),

avg_grade float(4,2),

PRIMARY KEY (sno)

);

CREATE TABLE score (

sno varchar(6) NOT NULL,

cno varchar(6) NOT NULL,

term varchar(15),

grade int(11),

PRIMARY KEY (sno,cno)

);

образец таблицы

Образец таблицы, соответствующий приведенной выше структуре таблицы, некоторые данные следующие:

studentповерхность:

scoreповерхность:

Пример вывода:

Пример вывода, часть данных выглядит следующим образом:

При написании этого вопроса произошла ошибка, с которой я никогда раньше не сталкивался:

mysql报错:1093 - Вы не можете указать целевую таблицу "student" для обновления в предложении FROM

Это означает: в операторе SQL вы не можете сначала запросить определенное значение в таблице, а затем изменить таблицу.

Невозможно одновременно запрашивать и изменять одну и ту же таблицу.

Мой код: напрямую изменить среднее значение, полученное из запроса, в качестве измененного содержимого.

Решение: используйте найденную информацию в качестве новой виртуальной таблицы, выполните запрос в виртуальной таблице, а затем измените таблицу учащихся.

ак исходный код:

update student
set avg_grade=(
select s.avg_grade from(
select student.sno,round(avg(grade),2) as avg_grade
from score,student
where score.sno = student.sno
group by student.sno
)s
where student.sno = s.sno)

рекомендация

отblog.csdn.net/m0_62811051/article/details/127659003