SQL Query获取另一列中每个唯一值的最大值

时间:2014-05-19 13:25:06

标签: sql sql-server

ID  Sum Name
a   10  Joe
a   8   Mary
b   21  Kate
b   110 Casey
b   67  Pierce

你会建议什么是最好的方法 为每个ID获取与最大总和相对应的名称(按ID分组)。 到目前为止我尝试了什么:

select ID, SUM(Sum) s, Name
from Table1
group by ID, Name
Order by SUM(Sum) DESC;

这会将记录排列成总和最高的组。然后我必须以某种方式标记这些记录并保留那些记录。任何提示或指示?非常感谢

最后,我想获得:

a 10 Joe
b 110 Casey

2 个答案:

答案 0 :(得分:1)

您需要row_number()功能:

select id, [sum], name
from (select t.*]
             row_number() over (partition by id order by [sum] desc) as seqnum
      from table1
     ) t
where seqnum = 1;

您的问题比需要的更令人困惑,因为您有一个名为sum的列。您应该避免将SQL保留字用于标识符。

row_number()函数为一组行分配一个序号,从1开始。该组由partition by子句定义。在这种情况下,具有相同id的所有行都在同一组中。数字的顺序由order by子句确定,因此值sum的值最大的值为1

如果您可能拥有重复的最大值且您想要所有这些值,请使用相关的函数rank()dense_rank()

答案 1 :(得分:0)

select * 
from
 (
   select *
    ,rn = row_number() over (partition by Id order by sum desc)
   from table
 )x
where x.rn=1

demo