1、建立成绩表
create table score
(sno VARCHAR(4) not null,
kemu VARCHAR(5) not null,
degree numeric(10,
1) not null
)engine = INNODB default CHARSET = utf8 ;
2、插入初始化测试数据
insert
into
score
values(1001,'语文',81),
(1002,'语文',85),
(1001,'数学',100),
(1002,'英语',88),
(1003,'py',99),
(1004,'语文',70),
(1001,'英语',98),
(1002,'py',87),
(1002,'数学',70),
(1004,'py',85),
(1004,'数学',56),
(1001,'py',78);
数据如下图所示:

3、执行SQL查看结果,结果符合期望
select sc1.sno,sc1.kemu,sc1.degree
from score sc1
where (select count(1) from score sc2 where sc1.kemu=sc2.kemu and sc1.degree<sc2.degree)<2
order by sc1.kemu,sc1.degree desc
查询的结果如下:

4、分析SQL
先取一个新表sc1,左连接至原表,对degree栏做比较,条件为sc1.kemu=sc2.kemu and sc1.degree<sc2.degree,其实就是列出同一门课内所有分数比较的情况。出现两次及以下,说明在这个科目中处于前2排名
4335

被折叠的 条评论
为什么被折叠?



