2016-07-27 43 views
1

我有以下数据返回之和对应的类别字段最大值的

ID CATEGORY VALUE 
x A  10 
x B  2 
x C  1 
y B  11 
y A  6 
z D  13 
z E  0 

我想组由ID类别使得求和为单一ID类别返回的是相应的最大ID组内。

结果看起来像这样。

ID CATEGORY VALUE 
x A   13 
y B   17 
z D   13 

这在SQL中可能吗?

感谢

+1

如果您有*两个*最大值和相同的'Id',该怎么办? E.E. '(x,A,10)'和'(x,Z,10)'记录? –

+0

没有考虑到这一点。我所看到的问题不会有这种情况,但这是一个有效的观点。大多数情况下,我将拥有一个具有较大价值的类别,而其他类别的比较或零将是非常小的。如果我确实有两个最大值,我会返回这两个类别。 –

回答

1

尝试窗函数排名:

select id, category, value 
    from (
    select id, category, sum(value) over (partition by id) as value, 
      rank() over (partition by id order by value desc) as rnk 
    from mytable) t 
where rnk=1; 

如果你有相同的值重复,它会同时显示。 (如果'x','B'的值为10):

id cat value 
x A 21 
x B 21 
y B 17 
z D 13 
+1

完美,谢谢! –

+1

@ e.shee如果你认为这个答案是完美的,那么你应该标记和upvote这个答案。 –

+0

我试图upvote并标记为已解决但仍然收到错误。稍后再试。 –

相关问题