2016-11-08 3 views
0

Ich habe eine Abfrage, die Ergebnisse im folgenden Format zurück:Maximalwerte von SELECT SQL Query

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 
.... 

Also im Grunde für jeden Benutzer in der Datenbank, es 3 Zeilen auflistet, die jeweils TypeA entspricht, TypeB, TypC . Jetzt muss ich die Benutzer-ID zurückgeben, die dem maximalen Wert für jeden Typ entspricht. So zum Beispiel, aus den obigen Daten würden wir erhalten:

TypeA User2 
TypeB User2 
TypeC User1 

Ich bin nicht sicher, wie man mit dieser in SQL, um fortzufahren.

+0

, die für das ist RDBMS ? Bitte fügen Sie ein Tag hinzu, um anzugeben, ob Sie 'mysql',' postgresql', 'sql-server',' oracle' oder 'db2' verwenden - oder etwas ganz anderes. –

Antwort

1

Ein typischer Weg, dies zu tun, verwendet 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 eine andere Lösung bietet die in der Regel effizienter ist:

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

Try this

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