MySQL数据库 - 复杂查询(二)第一关
·

@R星校长
第1关:查询学生平均分
本关任务:根据提供的表和数据,查询平均成绩小于60分的同学的学生编号(s_id)、学生姓名(s_name)和平均成绩(avg_score),要求平均成绩保留2位小数点。(注意:包括有成绩的和无成绩的)
student表数据:
| s_id | s_name | s_sex |
|---|---|---|
| 01 | Mia | 女 |
| 02 | Riley | 男 |
| 03 | Aria | 女 |
| 04 | Lucas | 女 |
| 05 | Oliver | 男 |
| 06 | Caden | 男 |
| 07 | Lily | 女 |
| 08 | Jacob | 男 |
course表数据:
| c_id | c_name | t_id |
|---|---|---|
| 01 | Chinese | 02 |
| 02 | Math | 01 |
| 03 | English | 03 |
teacher表数据:
| t_id | t_name |
|---|---|
| 01 | 张三 |
| 02 | 李四 |
| 03 | 王五 |
score表部分数据:
| s_id | c_id | s_score |
|---|---|---|
| 01 | 01 | 80 |
| 01 | 02 | 90 |
| 01 | 03 | 99 |
| 02 | 01 | 70 |
预期输出:
+------+--------+-----------+
| s_id | s_name | avg_score |
+------+--------+-----------+
| 04 | Lucas | 33.33 |
| 06 | Caden | 32.50 |
| 08 | Jacob | 0.00 |
+------+--------+-----------+
开始你的任务吧,祝你成功!

答案:
根据题目描述,我们还需要考虑无成绩的同学,因此我们要使用UNION操作符将一个查询有成绩且平均分低于60分的 SQL 和一个查询无成绩的 SQL连接作为最后的查询结果。
#请在此添加实现代码
########## Begin ##########
select b.s_id,b.s_name,ROUND(AVG(a.s_score),2) as avg_score from student b
inner join score a on b.s_id = a.s_id
GROUP BY b.s_id,b.s_name HAVING avg_score <60
union
select a.s_id,a.s_name,0 as avg_score from student a
where a.s_id not in (select distinct s_id from score);
########## End ##########
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)