背景
题目描述
查询平均成绩小于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 |
解题思路
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才是正确的。
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;
评论区