【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