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