參考: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;