【问题标题】:MYSQL Update column with column valueMYSQL 用列值更新列
【发布时间】:2020-12-22 03:54:43
【问题描述】:

需要更新包含值的 3 列的列平均值。这意味着不应该包含没有值或 0 的列作为平均值。请帮忙。这有点棘手。

grade_tbl 
+-- prelim_g --- semi_g --- finals_g --- average_g --+ 
|     85           80          85                    |
|     82           87                                |
|     83                       84                    |
|     81                                             |
+----------------------------------------------------+

到目前为止我有这个代码:

UPDATE grade_tbl SET average = (SELECT AVG(prelim, semi, finals))

【问题讨论】:

  • 缺失值是零还是NULL?你应该先澄清这一点。
  • 我已经检查过.. 它的零 (0)

标签: mysql average


【解决方案1】:

我们可以尝试以下逻辑,将零分配给缺失值(尚未为零),并且还通过“计数”仅非NULL/非零等级值来确定平均值。

UPDATE grade_tbl
SET
    average = CASE WHEN (prelim_g + semi_g + finals_g) > 0
                   THEN (prelim_g + semi_g + finals_g) /
                        ( IF(prelim_g > 0, 1, 0) +
                          IF(semi_g > 0, 1, 0)   +
                          IF(finals_g > 0, 1, 0) )
                   ELSE 0 END;

顺便说一句,更好的数据库设计是将所有成绩放在一个列中。然后,您可以利用 AVGCOUNT 函数,它们默认忽略 NULL 值。

【讨论】:

  • 如果3列全部为0,是否应该添加另一个条件?
  • @JohnArzaga 好点,我已经用涵盖所有 3 列可能为零的情况的逻辑进行了编辑。在这种情况下,我只是更新为零。
  • 按预期工作。我只是把 0 作为默认值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-11
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
  • 2013-12-14
相关资源
最近更新 更多