我尝试根据同一行中其他四列的舍入平均值来更新一列。
这是表格的样子:
+ ----------- + ---------- + -------------- + -------- - + ------------ + --------------- +
| 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?
提前致谢!
答案 0 :(得分:1)
AVG
用于分组(聚合)的行平均值。
如果您需要手动平均多个列 ..假设它是固定的#列,则可以使用:
ROUND((friendliness+activity+popularity+participation) / 4)