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
);