mysql有一张成绩表(姓名)(班级)(成绩)三个字段,查出不同班级的成绩前三名的学生的分数

这个SQL能找出每个班级成绩前三名。

子查询统计同班比当前成绩高的人数。
人数小于等于2 就是前三名。

比如班级1 有张三1 9 0、李四1 8 8 、王五1 8 5 子查询会算同班比1 9 0分高的人数。
0人小于等于2 ,所以张三进前三。

班级2 有赵六2 9 5 、孙七2 9 3 子查询算同班比2 9 5 分高的人数。
0人小于等于2 ,所以赵六进前三。

如果成绩并列,比如都1 9 0分,会算并列人数。
按成绩降序排,取前三名。

你用的时候注意处理并列情况。
具体看你的表结构和数据量。

SQL语句:查询各班成绩前3的同学姓名

可以解决。

建表语句: sql create table sc(id int,name varchar(2 0),class varchar(2 0),score int);
插入数据: sql insert into sc values(1 ,'badkano','一年一班',1 00); insert into sc values(2 ,'百度知道团长','一年一班',9 9 ); insert into sc values(3 ,'du小短','一年一班',9 5 ); insert into sc values(4 ,'du小小动','一年一班',9 7 ); insert into sc values(5 ,'du小智','一年一班',8 0); insert into sc values(6 ,'吕布','一年二班',6 7 ); insert into sc values(7 ,'赵云','一年二班',9 0); insert into sc values(8 ,'典韦','一年二班',8 9 ); insert into sc values(9 ,'关羽','一年二班',7 0); insert into sc values(1 0,'马超','一年二班',9 8 );
查询每个班级前三名: sql select from ( select row_number() over (partition by class order by score desc) 排名, from sc ) t where 排名 <= 3 order by class asc, score desc;
结果:
class name score 排名 一年一班 badkano 1 00 1 一年一班 du小小动 9 7 2 一年一班 百度知道团长 9 9 3 一年二班 马超 9 8 1 一年二班 赵云 9 0 2 一年二班 典韦 8 9 3
截图不确定。