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
答案 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