- create table stu2
- (
- stu_name varchar(20),
- lesson varchar(10),
- stu_score tinyint unsigned
- );
- insert into stu2 values('张三','数学',90);
- insert into stu2 values('张三','语文',50);
- insert into stu2 values('张三','地理',40);
- insert into stu2 values('李四','语文',55);
- insert into stu2 values('李四','政治',45);
- insert into stu2 values('王五','政治',30);
- insert into stu2 values('jack','数学',88);
- insert into stu2 values('jack','语文',67);
- insert into stu2 values('jack','地理',77);
select lesson,max(stu_score) from stu2 group by lesson;
每门课的第一名
注意,这个是错的:
select stu_name,lesson,max(stu_score) from stu2 group by lesson;
而必须用子查询才行
将每门课的最高分做成一个字表。而后用这个字表去和原表求交集。
select R1.stu_name,R1.lesson,R1.stu_score
from stu2 R1,
(select lesson,max(stu_score) as max_stu_score from stu2 group by lesson) R2
where R1.lesson=R2.lesson and R1.stu_score=R2.max_stu_score;
或者:select * from (select * from stu2 order by stu_score desc)as k group by lesson;
结果如下:
- +----------+--------+-----------+
- | stu_name | lesson | stu_score |
- +----------+--------+-----------+
- | 张三 | 数学 | 90 |
- | jack | 语文 | 67 |
- | 李四 | 政治 | 45 |
- | jack | 地理 | 77 |
- +----------+--------+-----------+