2017-02-11 48 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) 

否則你的小組是從內選擇