2017-02-11 49 views
0

我想基于行中的另一个值获得列中的最大值。列的最大值基于行中的值

我有以下代码:

UPDATE LeweringVsSkattingResultaat 
    SET maks = ((SELECT max(persentklaarkultivar2) FROM 
    LeweringVsSkattingResultaat) 
    group by kultivar2) 

我收到以下错误:不正确的语法关键字“组”附近。

我想为kultivar2中的每个值在列persentklaarkultivar2中设置最大值。

任何帮助将不胜感激。

问候

回答

1

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

谢谢戈登。它为我工作。 – Gideon

0

通过删除()

UPDATE LeweringVsSkattingResultaat 
    SET maks = (SELECT max(persentklaarkultivar2) FROM 
    LeweringVsSkattingResultaat 
    group by kultivar2) 

否则你的小组是从内选择