sql 面试题开窗函数row_number() over(partition by ... 分组 order by ...排序) as rn

表结构:

 

 

问题:求出每个班前三成绩的人姓名班级和排名

-- 解析,开窗函数, over(partition by 分组列1,分组列2   order by  排序列)as  排名

第一阶段全部数据排名:

 

 

第二阶段筛选排名

SELECT
	rn ,
	score,
	class,
	sname
from
	(
	SELECT
		*,
		ROW_NUMBER()
	OVER(PARTITION by
	class
	order by
		score desc 
	) rn
	from
		std_score 
)t
where
	t.rn <= 3
	;

 结果:

 

 

 

posted @ 2022-10-16 23:41  不带R的墨菲特  阅读(290)  评论(1)    收藏  举报