MYSQL 使用列值更新列

MYSQL Update column with column value

需要更新包含值的 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/非零等级值来确定平均值。

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 值。