我应该如何用其他两列的平均值更新 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。
我有一个包含以下列的 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。