MYSQL使用列值更新列

MYSQL使用列值更新列,mysql,average,Mysql,Average,需要从包含值的3列中更新列平均值。这意味着不带值或0的列不应包含在平均值中。请帮忙。这有点棘手 grade_tbl +-- prelim_g --- semi_g --- finals_g --- average_g --+ | 85 80 85 | | 82 87 | | 83

需要从包含值的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
/非零等级值来进行规范化

更新等级\u tbl
设置
平均值=当(预赛+半决赛+决赛)>0时的情况
然后(预赛+半决赛+决赛)/
(如果(预校准>0,1,0)+
IF(semi_g>0,1,0)+
如果(总决赛>0,1,0))
否则0结束;

顺便说一句,更好的数据库设计是将所有成绩都放在一列中。然后,您可以利用
AVG
COUNT
函数,默认情况下,这些函数忽略
NULL
值。

缺失的值是零还是
NULL
?你应该先澄清这一点,我查过了。。如果所有3列都是0,那么它的零(0)应该添加另一个条件?@JohnArzaga很好的一点,我用逻辑编辑过,它涵盖了所有3列都可能是零的情况。在这种情况下,我只更新为零。工作正常。我只是把0作为默认值。