题解 | #查询成绩#

查询成绩

https://www.nowcoder.com/practice/ef30689ae065434c89c129e9dfe1b4cd

这道题目要求我们查询出语文、数学、英语三科的平均成绩大于60分的学生人数。我们要做的事情如下:

1. 确定总体问题

我们需要从学生信息、课程信息和成绩信息中提取数据,计算每个学生的平均成绩,并筛选出平均成绩大于60分的学生人数。

2. 分析关键问题

  • 连接表:将StudentCourseSC表连接起来,以便获取每个学生的成绩信息。
  • 计算平均成绩:对每个学生的成绩进行平均计算。
  • 筛选符合条件的学生:筛选出平均成绩大于60分的学生。
  • 统计学生人数:计算符合条件的学生人数。

3. 解决每个关键问题的代码及讲解

步骤1:连接表

我们使用JOINStudentCourseSC表连接起来:

from
    SC
    join Student on Student.sId = SC.sId
    join Course on Course.cId = SC.cId
  • JOIN Student ON Student.sId = SC.sId:通过学生编号连接StudentSC表,以便获取学生的成绩信息。
  • JOIN Course ON Course.cId = SC.cId:通过课程编号连接CourseSC表,以便获取课程信息。
步骤2:计算平均成绩

我们使用AVG函数对每个学生的成绩进行平均计算:

where 
    Course.cname = '语文' or Course.cname = '数学' or Course.cname = '英语'
group by
    Student.sId
having 
    avg(SC.score) > 60
  • WHERE(...):筛选出语文数学和英语三门课。
  • GROUP BY Student.sId:按学生编号分组,以便计算每个学生的平均成绩。
  • HAVING AVG(SC.score) > 60:筛选出平均成绩大于60分的学生。
步骤3:统计学生人数

我们使用COUNT函数计算符合条件的学生人数:

select
    count(*)
from(
    -- 子查询
)s
  • COUNT(*):计算符合条件的学生人数。

完整代码

select
    count(*)
from(
    select
    Student.sId
    from
    SC
    join Student on Student.sId = SC.sId
    join Course on  Course.cId = SC.cId
    where 
    Course.cname = '语文' or Course.cname = '数学' or Course.cname = '英语'
    group by
    Student.sId
    having 
    avg(SC.score) > 60
)s

全部评论
靠谱的,很多答案没有考虑表内是否还有三科以外的学科。
1 回复 分享
发布于 04-07 22:33 广东

相关推荐

不愿透露姓名的神秘牛友
07-04 18:02
好不容易拿到了字节Offer,鼠鼠做后端的,但家里人觉得可能被裁员不稳定,让鼠鼠去投国企,现在好纠结到底该咋选
文档传偷助手:该投就投吧,不过建议别放弃offer 拿到手里的才是最好的
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-02 18:35
简历上把1个月实习写成了3个月,会进行背调吗?
码农索隆:一个月有一个月的实习经历,三个月有三个月的实习经历
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务