你的子查詢,如果你有比價值多爲kultivar2
會產生一個錯誤。 group by
將爲每個kultivar2
返回一行。
雖然你可以使用相關子查詢來解決這個問題(見答案的結束),我喜歡和更新的熱膨脹係數和窗函數來做到這一點:
with toupdate as (
select r.*,
max(persentklaarkultivar2) over (partition by kultivar2) as maxval
from LeweringVsSkattingResultaat r
)
update toupdate
set maks = maxval;
我要指出,有窗的功能,你可隨時隨地計算最大值,因此不需要存儲它。窗口函數進行了優化,以便他們可以利用LeweringVsSkattingResultaat(kultivar2, persentklaarkultivar2)
上的索引。
這可能是一個更好的方法。在插入,更新或從表格中刪除行時,您無需知道如何保持maks
值處於最新狀態。
相關子查詢看起來像:
UPDATE r
SET maks = (SELECT max(r2.persentklaarkultivar2)
FROM LeweringVsSkattingResultaat r2
WHERE r2.kultivar2 = r.kultivar2
)
FROM LeweringVsSkattingResultaat r;
謝謝戈登。它爲我工作。 – Gideon