2016-04-25 44 views
1


其實我有這樣的一個表:
enter image description here
但我想更新的第一行的價值給它的平均他們的孩子一樣的價值這樣的:
enter image description here
所以我用這個查詢:
更新一行

UPDATE mytable parent 
INNER JOIN mytable child 
ON child.parentId = parent.id 
SET parent.value = AVG(child.value) 
WHERE parent.parentId=0 

但我得到這個錯誤:#1111 - 無效使用組功能
怎樣的C我更正了我的查詢?

+0

只是一個旁註:可以有更多的級別?然後處理這個表格會變得非常複雜 - 特別是在MySQL中,缺乏遞歸查詢。但是,如果它總是隻有兩個級別,那麼我可能簡單地使用兩張桌子,一張給父母,一張給孩子。而且我通常不會冗餘地存儲數據,這就是您現在正在嘗試執行的操作。 –

回答

2

使用子查詢來加入你在哪裏計算的平均水平父ID的

查詢,以獲得平均每parentId的樣子:

SELECT parentId, AVG(value) as average FROM mytable GROUP BY parentId 

所以現在加入就可以了

UPDATE mytable parent 
INNER JOIN (SELECT parentId, AVG(value) as average FROM mytable GROUP BY parentId) child 
ON child.parentId = parent.id 
SET parent.value = child.average 
WHERE parent.parentId=0 
+0

您放錯了括號。你能糾正你的代碼嗎?然後我會驗證你的答案。 – bizard

+0

對不起,修正 – overflowed

2

對於單個記錄更新,您可以使用變量:

SET @id = 0;--your ID 
SET @avgVal = SELECT AVG(value) FROM mytable WHERE parentId = @id; 

UPDATE mytable parent 
    SET parent.value = @avgVal 
WHERE parent.parentId = @id; 
+0

我得到這個錯誤:#1093 - 你不能在FROM子句中指定更新的目標表'父' – bizard

+0

@bizard修改.... Plz檢查 –