SELECT SQL Query的最大值

时间:2016-11-08 12:33:27

标签: sql postgresql greatest-n-per-group

我有一个查询,它以下列格式返回结果:

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行,每行对应于TypeA,TypeB,TypeC。现在我需要返回对应于每种类型的最大值的用户ID。例如,从上面的数据中我们将得到:

TypeA User2
TypeB User2
TypeC User1

我不确定如何在SQL中继续这个。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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