我应该如何用其他两列的平均值更新 MySQL table 列?

How should I update a MySQL table column with the average of other two columns?

我有一个包含以下列的 table:id (AI, PK), name, surname, group, grade1, grade2, average 我必须从 PHP 脚本中插入 'grade1''grade2' 的平均值在 'average' 列中。

我用过:

INSERT INTO `table_name`(`average`) SELECT AVG((`grade1` + `grade2`)/2.0) FROM table_name GROUP BY `id`

我插入了成绩,但是不知何故,当我 运行 SQL 语句时,它仅使用平均值创建新行。我需要更新现有行中的列 'average',而不是创建新行。

提前致谢!

你似乎想要 update,而不是 insert:

update table_name
    set average = (grade1 + grade2) / 2;

我应该注意到,拥有这样一个计算列是危险的,因为它可能会不同步。生成的列更安全,您可以表示为:

alter table table_name add column average decimal(10, 2)
    generated always as ( (grade1 + grade2) / 2);

这是在查询值时计算的,因此它始终是最新的。

您应该使用 UPDATE ... WHERE ... 而不是 INSERT INTO ...

我也会考虑使用触发器而不是 PHP。