005、【MYY】sql题
题目如下:
问:
1.1、查询一班得分在80分以上的学生 ;
1.2、用一条sql语句查询出各个班级的男生人数和平均分。
建表语句如下:
drop table if exists t_classes; create table t_classes( classes_id int(3) auto_increment, classes_name varchar(40), constraint pk_classes_id primary key(classes_id) ) drop table if exists t_student; create table t_student( student_id int(10), classes_id int(3), student_name varchar(20), sex char(2), score int(3), constraint student_id_pk primary key(student_id), constraint fk_classes_id foreign key(classes_id) references t_classes(classes_id) )
解答:
1.1、查询一班得分在80分以上的学生 。如下:
# 1.1、查询一班得分在80分以上的学生 ;
select c.classes_name,s.student_id,s.student_name,s.sex,s.score
from t_classes c join t_student s
on c.classes_id = s.classes_id
where c.classes_name='一班' and s.score>80;
1.2、用一条sql语句查询出各个班级的男生人数和平均分。
如果理解成:用一条sql语句查询出各个班级的 男生人数 和 男生平均分。如下:
# 1.2、用一条sql语句查询出各个班级的男生人数和平均分。
# 如果理解成: 用一条sql语句查询出各个班级的 男生人数和 男生平均分。 如下:
# 查询出性别为男的,按照班级分组
select c.classes_id as '班级id', c.classes_name as '班级名称', count(*) as '男生人数', avg(s.score) as '男生平均分'
from t_classes c join t_student s
on c.classes_id = s.classes_id
where s.sex='男'
group by c.classes_id;
如果理解成:用一条sql语句查询出 各个班级的男生人数 和 各个班级的平均分。 网友给的答案如下:
# 如果理解成:用一条sql语句查询出 各个班级的男生人数 和 各个班级的平均分。 如下:
SELECT
c.classes_name,
count( s.classes_id ),
b.avg_score
FROM
t_student s JOIN t_classes c ON s.classes_id = c.classes_id
JOIN (SELECT classes_id,AVG(score) as avg_score FROM t_student GROUP BY classes_id) b
on b.classes_id = s.classes_id
WHERE
s.sex = '男'
GROUP BY
s.classes_id;