sql max for column基于行中的值

时间:2017-02-11 14:58:11

标签: sql sql-server

我试图根据一行中的另一个值获取列中的最大值。

我有以下代码:

views.py

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

对于kultivar2中的每个值,我想要列persentklaarkultivar2中的maksimum值。

非常感谢任何帮助。

此致

2 个答案:

答案 0 :(得分:1)

如果kultivar2的值超过值,则子查询会生成错误。 group by会为每个kultivar2返回一行。

虽然您可以使用相关子查询来解决问题(请参阅答案结束),但我喜欢使用可更新的CTE和窗口函数来执行此操作:

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;

答案 1 :(得分:0)

删除()

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

否则你的小组是在内部选择