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

codedecent
• 阅读 1198

原题目

从课程表(课程号,课程名) 学生表(学号,年龄,性别,课程号,分数)中 查询出平均分大于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有一点...不一样?

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
2年前
SQL 经典题型解答(6)
SQL经典习题解答(6)23、统计各科成绩各分数段人数:课程编号,课程名称,\10085\,\8570\,\7060\,\060\及所占百分比SELECTt1.,t2.all_num,CONCAT(ROUND(t1.num/t2.all_num
Wesley13 Wesley13
2年前
SQL_50题
\1、查询“1001”课程比“1002”课程成绩高的所有学生的学号;selecta.Sfrom(selectS,scorefromscwhereC1001)a,(selectS,scorefromscwhereC1002)bwherea.scoreb.scoreanda.s
Wesley13 Wesley13
2年前
SQL题目
Student(S,Sname,Sage,Ssex)学生表      S:学号;Sname:学生姓名;Sage:学生年龄;Ssex:学生性别Course(C,Cname,T)课程表                   C,课程编号;Cname:课程名字;T:教师编号SC(S,C,score)成绩表              
Wesley13 Wesley13
2年前
SQL 查询:查询学生平均成绩
  编程萌新,因为遇到这么个SQL查询的问题:在一张表A里有如下字段:学生姓名、学科名、学科成绩。写一条SQL语句查出各科平均成绩并按学生姓名分组,按如下格式显示:学生姓名|语文|数学|英语。一开始遇到的时候挺懵的,有印象但是却忘了怎么写了,接下来就是查阅资料并亲自上手测试是否可行~  第一次代码修修改改如下,此时还是在只用一张表来查询(无法实现上述
Wesley13 Wesley13
2年前
Mysql 查询所有课程的成绩第2名到第3名的学生信息及该课程成绩
 查询所有课程的成绩第2名到第3名的学生信息及该课程成绩1\.查询课程ID为‘01’的课程的成绩第2名到第3名的学生信息及该课程成绩SELECT  d.,c.排名,c.s_score,c.c_idFROM  (SELECTa.s_id,a.s_score,a.c_id,@i:@i1AS排名FROMs
Wesley13 Wesley13
2年前
HQL的多表查询
对象之间总是有各种各样的关系,关联关系是类之间最常见的关系。多表查询是HQL中的强大功能之一,包括内连接、左连接和右连接等。多表查询的设置及运行都比较麻烦,在运行本节中的示例时,务必保证每一步都没有错误。 6.4.1 表之间的关联关系 在数据库joblog中用到了3个表:student(学生表)、course(课程表
Stella981 Stella981
2年前
Hive实战之学生课程成绩
基表:usemyhive;CREATETABLEcourse(idint,sidint,coursestring,scoreint);INSERTINTOcourseVALUES(1,1,'yuwe
Wesley13 Wesley13
2年前
20175316盛茂淞 2018
20175316201820192《Java程序设计》第2周课上测试总结上周考试题目总结题目1题目要求:在Ubuntu中用自己的有位学号建一个文件,教材p29Example2\_51.修改代码a\\中添
Wesley13 Wesley13
2年前
MySQL面试
范式1:原子性,表中的没一列都是不可分的,不能是数组,集合。范式2:在第一范式基础上,属性完全依赖于主键。范式3:非主属性不依赖于其它非主属性。(关系中不包含在其它关系中已包含的非主键信息)   比如Student表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)   这样一个表结构,就存在上述关系。 学号 所在院校
Stella981 Stella981
2年前
Django多对多模型自定义中间媒介(through)在运行期的表现
使用自定义中间媒介来实现多对多关系的时候,主要的目的是在中间媒介中保存关系的特有属性。举个例子,比如学生与课程之间的关系就属于多对多的,而且当学生与课程建立关系之后随之还会产生附属的属性,如:成绩。如下例:<!lang:pythonclassStudent(models.Model):name
codedecent
codedecent
Lv1
男 · 有手就行工程师
如你的心,一往无前
文章
3
粉丝
3
获赞
3