MySQL,问题:求出每科的平均成绩、最高成绩、最低成绩及对应的学生信息。

第一个表名为:stu_info第二个表名为:stu_grade没有财富值,真心不好意思!!!辛苦大神们了,实在是做不出,还是思路不对。
这是面试题,我总觉得有问题,这成绩能和学生信息对应吗?!

这题目考的是关联查询、分组、排序等基础知识

1.每科的平均成绩:
select avg(grade) from stu_grade group by course;
2.每科的最高成绩及对应的学生信息:
select 
B.grade,
A.* 
from stu_grade as B
left join stu_info as A on B.stu_No = A.stu_No
group by B.course 
order by B.grade desc limit 1;
3.每科的最低成绩及对应的学生信息:
select
B.grade,
A.* 
from stu_grade  as B 
left join stu_info as A on B.stu_No = A.stu_No
group by B.course 
order by B.grade asc limit 1;

追问

  第1个能查出来。

  第2个每科的最高成绩及对应的学生信息

  第3个每科的最低成绩及对应的学生信息

  第2个,第3个都有问题,只能查出一条记录,我用每科的最高成绩和最低成绩应该分别都是三条记录,我用了limit 3也不行,你看看,查出都是一个人的记录。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-06-26
把你的表导出来给我发一下

用group by追问

create table student_grade(
stu_No int(4) not null,
course varchar(128) not null,
grade int(4) not null
)engine=innodb charset=utf8;
字数限制

追答

SELECT a.course,a.avg,a.max,(GROUP_CONCAT(case when a.max=a.grade then a.stu_NAME end))maxname,a.min,
(GROUP_CONCAT(case when a.min=a.grade then a.stu_NAME end))minname
from
(SELECT b.course,b.avg,b.max,b.min,a.grade,a.stu_No,a.stu_NAME
from
(SELECT a.stu_No,a.course,a.grade,b.stu_NAME from stu_grade a ,stu_info b where a.stu_No=b.stu_No) a
LEFT join
(SELECT a.course,(avg(a.grade))avg,(max(a.grade))max,(min(a.grade))min from stu_grade a GROUP BY a.course) b
on a.course=b.course) a
GROUP BY a.course
那天写了一个,都没了,今天又给你写一遍,优点是一次查完,要分开查用别人的吧

追问

完全看不懂啊,大神!这是一句话吗?最后一点from stu_grade a GROUP BY a.course)
bon a.course=b.course) a GROUP BY a.course;; 怎么会有两个course呢 a.course=b.course,只有一个表有course啊

本回答被提问者采纳
相似回答