2016-07-27 28 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並標記爲已解決但仍然收到錯誤。稍後再試。 –

相關問題