可以用row_number函数来解决。
1、创建测试表,插入数据:
create table sc(id int,name varchar(20),class varchar(20),score int); insert into sc values (1,'badkano','一年一班',100)insert into sc values (2,'百度知道团长','一年一班',99)insert into sc values (3,'du小短','一年一班',95)insert into sc values (4,'du小小动','一年一班',97)insert into sc values (5,'du小智','一年一班',80)insert into sc values (6,'吕布','一年二班',67)insert into sc values (7,'赵云','一年二班',90)insert into sc values (8,'典韦','一年二班',89)insert into sc values (9,'关羽','一年二班',70)insert into sc values (10,'马超','一年二班',98)
2、查询每个班级的前五名,可用语句:
select * from(select row_number() over (partition by class order by score desc) 排名,* from sc) twhere 排名<=3 order by class asc,score desc
3、结果截图:
