您的位置:首页 > 数据库 > MySQL

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

2017-10-10 16:24 337 查看
参考: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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: