学生表:tb_student(name:学生姓名,id:学号,class:班级,in_time:入学时间,age:年龄,sex:性别,major:专业)
学生成绩表:tb_score(id:学号,course:课程,score:分数)
(1)筛选出2017年入学的“计算机”专业年龄最小的10位同学名单(姓名、学号、班级、年龄)
(2)统计每个班同学各科成绩平均分大于80分的人数和人数占比
您好,请参考如下答案:
select name,id,class,age
from tb_student
where year(in_time)=2017
and major = '计算机'
ORDER BY age ASC
limit 10;
SELECT a.class,
sum(case when aaa.x > 80 then 1 else 0 end)as num_80 ,
(sum(case when aaa.x > 80 then 1 else 0 end)/count(*))as proportion
from tb_student a
INNER JOIN (SELECT id,avg(score)as x from tb_score GROUP BY id)as aaa
on a.id = aaa.id
GROUP BY class;
解析:写一个子查询,从score表中得到以学号分组的学生各科平均分。命名为aaa,将其与学生表内联结。再以class分组,得到以class分组的各班学生的平均分,最后通过case语句,sum聚合函数得到平均分>80分的计数,和所占各班总人数比例。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。