【问题标题】:How should I update a MySQL table column with the average of other two columns?我应该如何用其他两列的平均值更新 MySQL 表列?
【发布时间】: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 语句时,它只使用平均值创建新行。我需要更新现有行中的“平均”列,而不是创建新行。

提前谢谢你!

【问题讨论】:

    标签: php mysql sql sql-update sql-insert


    【解决方案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。

    【讨论】:

      猜你喜欢
      • 2012-06-21
      • 1970-01-01
      • 2020-02-08
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-11
      • 1970-01-01
      相关资源
      最近更新 更多