基于行中其他列的舍入平均值的MYSQL更新列

时间:2014-06-17 15:38:03

标签: mysql

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

这是表格的样子:

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

| member_id | level_id |友善|活动|人气|参与| + ----------- + ---------- + -------------- + ---------- + ------------ + --------------- +

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

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

这是我最初尝试这样做的方式:

UPDATE member_levels SET level_id = 
ROUND(AVG(friendliness+activity+popularity+participation)) 
WHERE member_id = '1017895';

上面给出了错误:组功能的使用无效

所以,我在Stack Overflow上搜索了一下,发现了这个 MySQL Error 1093 - Can't specify target table for update in FROM clause

基于以上所述,我尝试了这样的嵌套子查询:

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';

但是这给了我错误:未知栏&m; {名}'在' where子句'

然后我在Stack Overflow上找到了这个问题:Update column with average calculation

所以,基于这个问题,我尝试了这个:

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';

再一次,这次尝试给了我错误:未知列&m; member_id'在' where子句'

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

提前致谢!

1 个答案:

答案 0 :(得分:1)

AVG用于分组(聚合)的平均值。

如果您需要手动平均多个 ..假设它是固定的#列,则可以使用:

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