MYSQL根据行中其他列的四舍五入平均值更新列

MYSQL根据行中其他列的四舍五入平均值更新列,mysql,Mysql,我试图根据同一行中其他四列的四舍五入平均值更新一列 下面是该表的外观: +-----------+----------+--------------+----------+------------+---------------+ |会员身份|级别|身份|友好|活动|受欢迎|参与| +-----------+----------+--------------+----------+------------+---------------+ |1017895 | 4 | 7 | 5 | 4 | 4

我试图根据同一行中其他四列的四舍五入平均值更新一列

下面是该表的外观:

+-----------+----------+--------------+----------+------------+---------------+

|会员身份|级别|身份|友好|活动|受欢迎|参与| +-----------+----------+--------------+----------+------------+---------------+

|1017895 | 4 | 7 | 5 | 4 | 4|

+-----------+----------+--------------+----------+------------+---------------+

下面是我一开始是如何尝试这样做的:

UPDATE member_levels SET level_id = 
ROUND(AVG(friendliness+activity+popularity+participation)) 
WHERE member_id = '1017895';
上面给出的错误是:组函数的使用无效

所以,我对堆栈溢出进行了搜索,发现了这个

基于上述内容,我尝试执行如下嵌套子查询:

UPDATE member_levels m1 SET m1.level_id = 
 (SELECT * FROM 
    (SELECT ROUND(AVG(friendliness+activity+popularity+participation)) 
     FROM member_levels m2 
     WHERE m2.member_id = m1.member_id)a
  ) 
WHERE m1.member_id = '1017895';
但这给了我一个错误:“where子句”中的未知列“m1.member_id”

然后我在堆栈溢出上发现了这个问题:

因此,基于这个问题,我尝试了以下方法:

UPDATE member_levels m1, 
  (SELECT 
   ROUND(AVG(m2.friendliness+m2.activity+m2.popularity+m2.participation))
   rounded_avg 
   FROM member_levels m2 
   WHERE m2.member_id  = m1.member_id
  ) s 
SET m1.level_id = s.rounded_avg 
WHERE m1.member_id = '1017895';
同样,那次尝试给了我一个错误:“where子句”中的未知列“m1.member_id”

我错过了什么?如何根据友好度、活动度、受欢迎度和参与度的四舍五入平均值更新级别id


提前谢谢

AVG
表示分组(聚合)上的行平均值

如果需要手动计算多个列的平均值。。假设它是一个固定的列,这将起作用:

ROUND((friendliness+activity+popularity+participation) / 4) 

AVG
不能像你想象的那样工作。请看下面的图片。它不会取你的4列,对它们的值求和,然后将结果除以4。它计算所有行的平均值…未测试:
ROUND(CAST((友好度+活动+受欢迎度+参与度)为DOUBLE)/4.0)ROUND\u avg
应该有效。