MySQL练习题50道:查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩

MySQL练习题50道:查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩

背景

MySQL经典练习题及答案,常用SQL语句练习50题

题目描述

查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩

答案

s_id s_name s_brith s_sex avg_score
04 李云 1990-08-06 33.3333
06 吴兰 1992-03-01 32.5000
08 王菊 1990-01-20 0.0000

解题思路

1
2
3
4
5
6
select stu.*, avg(s_score) as avg_score
from student stu
left join score sc
on sc.s_id = stu.s_id
group by s_id
having avg(s_score) < 60;

但是这里有一个问题,查看学生表和成绩表会发现,编号为08的学生没有参与考试,所以应该记为0分。在连接的时候,会缺少这个数据,所以要加一个非空判断,下边这个sql才是正确的。

1
2
3
4
5
6
select stu.*, IFNULL(avg(s_score),0) as avg_score
from student stu
left join score sc
on sc.s_id = stu.s_id
group by s_id
having IFNULL(avg(s_score),0) < 60;