2016-11-08 83 views
0

我有,它返回以下列格式結果的查詢:所以基本上從SELECT SQL查詢最大值

User1 TypeA 3 
User1 TypeB 29 
User1 TypeC 100 
User2 TypeA 221 
User2 TypeB 31 
User2 TypeC 32 
User3 TypeA 21 
User3 TypeB 1 
User3 TypeC 10 
.... 

對於數據庫中的每個用戶,它列出了3排,每一個對應於類型A,類型B,TypeC 。現在我需要返回對應於每種類型的最大值的用戶ID。因此,例如,從上面的數據,我們將獲得:

TypeA User2 
TypeB User2 
TypeC User1 

我不知道如何在SQL中繼續此操作。

+0

其中RDBMS是這樣的?請添加一個標籤來指定您是使用'mysql','postgresql','sql-server','oracle'還是'db2' - 或者其他的東西。 –

回答

1

這樣做的一種典型方式使用row_number()

with t as (
     <your query here> 
    ) 
select t.* 
from (select t.*, 
      row_number() over (partition by typecol order by col3 desc) as seqnum 
     from t 
    ) t 
where seqnum = 1; 

的Postgres提供了另一種解決方案,它通常是更有效的:

select distinct on (typecol) q.* 
from (<your query here>) q 
order by typecol, col3 desc; 
0

試試這個

SELECT X.col2,X.col1 FROM 
    (SELECT col1,col2,col3,row_number() over (partition by col2 order by col3 desc) as seq, 
    FROM table1)X 
    WHERE X.seq = 1