【mysql经典题目】科目成绩都大于80分\每个科目的第一名\总成绩排名


参考:http://blog.csdn.net/lifushan123/article/details/44948135


1、查询出科目成绩都大于80分的学生的名字?

drop table if EXISTS tmp_1;
create table tmp_1
(`Id` INT NOT NULL AUTO_INCREMENT,
name varchar(10),
subject varchar(10),
score int,
PRIMARY KEY(`Id`));

insert into tmp_1 (name,subject,score) values ('李云龙','语文',79);
insert into tmp_1 (name,subject,score) values ('李云龙','数学',81);
insert into tmp_1 (name,subject,score) values ('楚云飞','语文',81);
insert into tmp_1 (name,subject,score) values ('楚云飞','数学',89);
insert into tmp_1 (name,subject,score) values ('张大彪','语文',79);
insert into tmp_1 (name,subject,score) values ('张大彪','数学',90);

-- 虽然瞟一眼就知道答案是楚云飞,但是我们要通过sql求出结果

select name
from tmp_1
group by name
having sum(score > 80) > 1;

或者

select a.name
from tmp_1 a
left join tmp_1 b on b.name = a.name
where a.score > 80 and b.score > 80 and a.subject != b.subject
group by a.name;


2、查询出每个科目的第一名的学生的学科、姓名、分数[依次是数学、语文]?;

select a.subject,name ,max_score
from tmp_1 a
left join (select subject,max(score) max_score from tmp_1 group by subject) b on  a.score=b.max_score
where a.subject=b.`subject`
order by
case when a.subject='数学' then 1
 when a.subject='语文' then 2 else 3 end ;


3、查询出总成绩排名,字段为姓名和分数,降序展示?;

select name,sum(score)
from tmp_1
group by NAME
order by sum(score) desc;

 




免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM