添加具有组的最大值的列

时间:2014-10-07 06:41:29

标签: sql

我想添加一个额外的列,其中将显示每个组(ID)的最大值 表格如下:

select ID, VALUE from mytable
  

ID VALUE
  1 4
  1 1
  1 7
  2 2
  2 5
  3 7
  3 3

以下是我想得到的结果:

  

ID VALUE max_values
  1 4 7
  1 1 7
  1 7 7
  2 2 5
  2 5 5
  3 7 7
  3 3 7

提前感谢您的帮助!

4 个答案:

答案 0 :(得分:4)

您之前的问题表明您使用的是SQL Server,在这种情况下您可以使用window functions

SELECT  ID, 
        Value,
        MaxValue = MAX(Value) OVER(PARTITION BY ID)
FROM    mytable;

根据您对第一个求和值的另一个答案的评论,您可能需要使用子查询来实际获得此值:

SELECT  ID, 
        Date,
        Value,
        MaxValue = MAX(Value) OVER(PARTITION BY ID)
FROM    (   SELECT  ID, Date, Value = SUM(Value) 
            FROM    mytable
            GROUP BY ID, Date
        ) AS t;

答案 1 :(得分:2)

在subselect中无需使用GROUP BY。

select ID, VALUE, 
  (select MAX(VALUE) from mytable where ID = t.ID) as MaxValue
from mytable t

答案 2 :(得分:0)

尝试使用子选择和分组依据,然后获取该组的MAX:

select 
  ID, 
  VALUE, 
  (select MAX(VALUE) 
   from mytable 
   group by ID 
   having ID = t.ID
  ) as max_values
from mytable t

编辑:

我构建了一个SQL fiddle,这表明我的解决方案有效,但VDohnal也是正确的,并且不需要小组,所以我会回答他的答案。

答案 3 :(得分:0)

使用此查询。

SELECT ID
    ,value
    ,(
        SELECT MAX(VALUE)
        FROM GetMaxValue gmv
        WHERE gmv.ID = gmv1.ID
        GROUP BY ID
        ) as max_value
FROM GetMaxValue gmv1
ORDER BY ID