分组函数查询

利用分组函数查询

开发工具与关键技术:PLSQL Developer、Oracle
作者:梁添荣
撰写时间:2019-4-1

记得有到作业题
9.查询所有课程成绩小于60分的同学的学号、姓名
当时我理解为:查询 每个课程成绩都低于60 的同学的学号、姓名
想了半天,都想不出做法,后来查看了答案,才发现,理解错了
可能是倔,又按自己理解的做,并改成是低于81分的

  1. 查询出所有课程成绩的同学学号、名字,总条数,并按名字、学号分组
    select student.sno, sname,count(student.sno) a from sc join student on sc.sno = student.sno
    group by sname,student.sno

  2. 查询出所有的课程成绩低于81的同学姓名、学号、总条数并按姓名、学号分组
    select sname,count(sc.sno) a from sc join student on sc.sno = student.sno
    where score < 81
    group by sname

  3. 如果一个同学的所有课程成绩的 总条数 等于 该同学 的课程成绩低于81的 总条数
    则该同学的所有课程成绩都低于81
    select a.sno,a.sname from (select student.sno, sname,count(student.sno) a from sc join student on sc.sno = student.sno
    group by sname,student.sno) a,(select sname,count(sc.sno) a from sc join student on sc.sno = student.sno
    where score < 81
    group by sname) b
    where a.a=b.a and a.sname = b.sname
    查出结果为下图

在这里插入图片描述

下图为所有同学的课程成绩,只有李四和琴訫的所有课程成绩都低于81

在这里插入图片描述

从这道题发现 查询 一个字段 并其别名,再按group by 该字段的别名,是会报错的