我应该如何用其他两列的平均值更新 MySQL 表列?
Posted
技术标签:
【中文标题】我应该如何用其他两列的平均值更新 MySQL 表列?【英文标题】:How should I update a MySQL table column with the average of other two columns? 【发布时间】:2020-12-04 13:44:04 【问题描述】:我有一个包含以下列的表: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 语句时,它只使用平均值创建新行。我需要更新现有行中的“平均”列,而不是创建新行。
提前谢谢你!
【问题讨论】:
【参考方案1】:你似乎想要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);
这是在值被查询时计算的,因此它始终是最新的。
【讨论】:
它是这样工作的,但是如果我插入带有成绩和姓名的新学生,我必须删除平均列以便再次更新它,并且我需要对平均列执行几个操作。 @丹尼尔。 . .这通过建议计算列来解决这个问题。而且您不必“删除”列来更新新值或维护计算列,所以我不知道“删除”指的是什么。【参考方案2】:您应该使用UPDATE ... WHERE ...
而不是INSERT INTO ...
我也会考虑使用触发器而不是使用 PHP。
【讨论】:
以上是关于我应该如何用其他两列的平均值更新 MySQL 表列?的主要内容,如果未能解决你的问题,请参考以下文章