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