MYSQL根据行中其他列的四舍五入平均值更新列
我试图根据同一行中其他四列的四舍五入平均值更新一列 下面是该表的外观: +-----------+----------+--------------+----------+------------+---------------+ |会员身份|级别|身份|友好|活动|受欢迎|参与| +-----------+----------+--------------+----------+------------+---------------+ |1017895 | 4 | 7 | 5 | 4 | 4| +-----------+----------+--------------+----------+------------+---------------+ 下面是我一开始是如何尝试这样做的:MYSQL根据行中其他列的四舍五入平均值更新列,mysql,Mysql,我试图根据同一行中其他四列的四舍五入平均值更新一列 下面是该表的外观: +-----------+----------+--------------+----------+------------+---------------+ |会员身份|级别|身份|友好|活动|受欢迎|参与| +-----------+----------+--------------+----------+------------+---------------+ |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
应该有效。