Sql 如何根据另一列排序获得一列的前n?

Sql 如何根据另一列排序获得一列的前n?,sql,postgresql,select,Sql,Postgresql,Select,我有下表: year | name | points ----------------------- 2000 | user1 | 46 1995 | user3 | 25 1995 | user1 | 12 2000 | user2 | 24 1995 | user2 | 33 1997 | user4 | 40 2000 | user3 | 52 1997 | user2 | 38 我需要查询每年排名前2位的用户(得分最

我有下表:

year  |  name  | points
-----------------------
2000  | user1  |   46
1995  | user3  |   25
1995  | user1  |   12
2000  | user2  |   24
1995  | user2  |   33
1997  | user4  |   40
2000  | user3  |   52
1997  | user2  |   38
我需要查询每年排名前2位的用户(得分最多)

应该是这样的:

year  |  name  | points
-----------------------
2000  | user3  |   52
2000  | user1  |   46
1997  | user4  |   40  
1997  | user2  |   38
1995  | user2  |   33
1995  | user3  |   25
在博士后如何做到这一点


谢谢

规范方法使用
行编号()

请注意,如果存在连接,则一年内可以返回两行以上的数据

select t.*
from (select t.*,
             row_number() over (partition by year order by points desc) as seqnum
      from t
     ) t
where seqnum <= 2;
select t.*
from t
where t.points in (select t2.points
                   from t t2
                   where t2.year = t.year
                   order by t2.points desc
                   limit 2
                  );