2016-11-08 82 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