【问题标题】:Add a column with the max value of the group添加具有组最大值的列
【发布时间】:2014-12-01 12:38:50
【问题描述】:

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

select ID, VALUE from mytable

ID 值
1 4
1 1
1 7
2 2
2 5
3 7
3 3

这是我想要得到的结果:

ID VALUE 最大值
1 4 7
1 1 7
1 7 7
2 2 5
2 5 5
3 7 7
3 3 7

提前感谢您的帮助!

【问题讨论】:

  • 您使用的是什么 DBMS?

标签: sql


【解决方案1】:

您之前的问题表明您使用的是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;

【讨论】:

  • 谢谢你,你的帮助很大
  • @user3531117 最好在评论中说谢谢,点击数字下方的复选标记将其标记为已接受。
【解决方案2】:

在子选择中不需要使用 GROUP BY。

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

【讨论】:

  • 那么你不是对所有行都有相同的值吗?
  • select ID, Date, sum (Value) from mytable 日期是月份,我想查询每个月的值。然后添加一个列,该列将反映每个 ID 的最大值。问题是我不希望查询执行两次大大减慢进程的 sum 函数
  • 不要在所有答案中添加评论,请编辑您的问题。
【解决方案3】:

使用这个查询。

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

【讨论】:

  • 在我的情况下,我使用了一个大的求和函数,而执行另一个表可能不太合适。我想知道是否有更简单的方法..
  • 提出你的完整问题,你在找什么?
  • select ID, Date, sum (Value) from mytable 日期是月份,我想查询每个月的值。然后添加一个列,该列将反映每个 ID 的最大值。问题是我不希望查询执行两次大大减慢进程的 sum 函数
【解决方案4】:

尝试使用 sub select 和 group by,然后获取该组的 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 也是正确的,不需要 group by,所以我会支持他的答案。

【讨论】:

  • 子选择应该用括号括起来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-25
  • 2015-06-25
  • 1970-01-01
  • 2016-11-03
  • 1970-01-01
  • 2023-03-25
相关资源
最近更新 更多