你的子查询,如果你有比价值多为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