这道SQL有一点...不一样?

codedecent
• 阅读 961

原题目

从课程表(课程号,课程名) 学生表(学号,年龄,性别,课程号,分数)中 查询出平均分大于60分的学生的学号及课程成绩

最初尝试

一开始不太会做,直接在网络上搜索答案,找到的却只有<查询平均成绩大于60分的学生的学号和平均成绩>这样的题目答案

SELECT
    s_id,
    AVG( s_score ) 
FROM
    score 
GROUP BY
    s_id 
HAVING
    avg( s_score ) > 60

单表操作,而且还和题意有差别,但是基本的语句形式是搭好的了

假设在这里也使用单表操作

select
    s.s_id ,
    s.s_score
from
    test2.student s
where
    s_id in (
    select
        s.s_id
    from
        test2.student s
    group by
        s.s_id
    having
        avg(s.s_score) > 60);

这道SQL有一点...不一样? 结果虽然没有问题,但是结果由于缺少学科的名字,不知道某一学生分数对应的学科是什么,是不是应该把学科名也一并查询出来,不然题目给的学科表感觉有点多余了。。。

最终解决

尝试用正常处理方式拆解为两步处理(设学生表为student,课程表为course)

1.求平均分大于60分的学生的学号

select
    s.s_id
from
    student s 
group by
    s.s_id
having
    avg(s.s_score)  > 60;

这道SQL有一点...不一样?

2.求出一个学生的所有学科成绩(如:求01号学生的)

select
    s.s_id,
    c.c_name,
    s.s_score
from
    test2.course c
join 
    test2.student s
on 
    c.c_id = s.s_subjectNo
where 
    s.s_id  = '01';

这道SQL有一点...不一样?

3.将两者组合得到最终结果

select
    s.s_id,
    c.c_name,
    s.s_score
from
    course c
join 
    student s
on 
    c.c_id = s.s_subjectNo
where
    s.s_id in (
    select
        s.s_id
    from
        student s
    group by
        s.s_id
    having
        avg(s.s_score) > 60);

这道SQL有一点...不一样?

点赞
收藏
评论区
推荐文章
光头强的博客 光头强的博客
4个月前
Java面向对象试题
1、请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
Wesley13 Wesley13
1年前
HQL的多表查询
对象之间总是有各种各样的关系,关联关系是类之间最常见的关系。多表查询是HQL中的强大功能之一,包括内连接、左连接和右连接等。多表查询的设置及运行都比较麻烦,在运行本节中的示例时,务必保证每一步都没有错误。 6.4.1 表之间的关联关系 在数据库joblog中用到了3个表:student(学生表)、course(课程表
Wesley13 Wesley13
1年前
MySQL 24小时入门笔记(3),插入和删除,删库到跑路
MySQL24小时入门笔记插入INSERTINSERT用法非常简单。现在我们有表students如下。列名类型约束idintprimarykeynamechar(16)NOTNULL向里面插入一条学号为1,姓名为学姐的学生,只需要写如下SQ
Stella981 Stella981
1年前
Hive实战之学生课程成绩
基表:usemyhive;CREATETABLEcourse(idint,sidint,coursestring,scoreint);INSERTINTOcourseVALUES(1,1,'yuwe
Wesley13 Wesley13
1年前
20175316盛茂淞 2018
20175316201820192《Java程序设计》第2周课上测试总结上周考试题目总结题目1题目要求:在Ubuntu中用自己的有位学号建一个文件,教材p29Example2\_51.修改代码a\\中添
Easter79 Easter79
1年前
Spring核心干货1
点击上方蓝色字↑↑↑,关注公众号在公众号回复课程,获取JAVA全栈课程1.Spring历史Spring是于2003年兴起的一个轻量级的Java开源框架,由RodJohnson在其2002年的著作《ExpertOneOnOneJ2EEDevelopmentandDesign》中
Wesley13 Wesley13
1年前
MySQL面试
范式1:原子性,表中的没一列都是不可分的,不能是数组,集合。范式2:在第一范式基础上,属性完全依赖于主键。范式3:非主属性不依赖于其它非主属性。(关系中不包含在其它关系中已包含的非主键信息)   比如Student表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)   这样一个表结构,就存在上述关系。 学号 所在院校
可莉 可莉
1年前
20165235 实验一 Java开发环境的熟悉
20165235实验一Java开发环境的熟悉课程:JAVA程序设计姓名:祁瑛学号:20165235指导老师:娄嘉鹏实验日期:2018.4.2实验内容:java开发环境的熟悉一,实验内容及步骤实验一Java开发环境的熟
Stella981 Stella981
1年前
20165235 实验一 Java开发环境的熟悉
20165235实验一Java开发环境的熟悉课程:JAVA程序设计姓名:祁瑛学号:20165235指导老师:娄嘉鹏实验日期:2018.4.2实验内容:java开发环境的熟悉一,实验内容及步骤实验一Java开发环境的熟
Stella981 Stella981
1年前
Django多对多模型自定义中间媒介(through)在运行期的表现
使用自定义中间媒介来实现多对多关系的时候,主要的目的是在中间媒介中保存关系的特有属性。举个例子,比如学生与课程之间的关系就属于多对多的,而且当学生与课程建立关系之后随之还会产生附属的属性,如:成绩。如下例:<!lang:pythonclassStudent(models.Model):name
codedecent
codedecent
Lv1
有手就行工程师
如你的心,一往无前
3
文章
1
粉丝
1
获赞