查询平均成绩最高的同学的姓名(SQL入门-查询语句)--PostgreSQL

2022-07-28,,,,

查询平均成绩最高的同学的姓名

文章目录

  • 查询平均成绩最高的同学的姓名
    • 正解1
      • 思路
      • SQL代码
    • 正解2
      • 思路
      • 代码
    • 尝试过的

今天刷SQL语句练习题的时候看到这样一个题目:

看上去是个简单的查询语句,可是仔细一想,好像还不太好写

这里先给各位看看数据库里会用到的一些表格(放小图,不影响看重点内容):

  1. student 表:
  2. sc表(选课表)

    那么查询出来的应该是,这个叫做ZHZ的人

正解1

注意事项:一定要注意空值,这个家伙会很捣乱!

思路

把成绩的average按照降序排列,并且group by学号,然后取出第一个就是平均成绩的最高分,然后找那个成绩对应的名字即可

SQL代码

先放正解在这里把

SELECT student.sname, avg(sc.grade) AS AVGGGGGG
FROM student, sc
WHERE student.sno=sc.sno
GROUP BY student.sname
HAVING avg(sc.grade) in (
SELECT avg(grade) as avg
FROM sc
WHERE grade NOTNULL
GROUP BY sc.sno
ORDER BY avg desc limit 1);

这个是结果:

正解2

思路

找出平均成绩大于等于所有人平均成绩的同学即可

代码

SELECT student.sname, avg(sc.grade) AS avg_grade
FROM student, sc
WHERE student.sno=sc.sno
GROUP BY student.sname
HAVING avg(sc.grade) >= all(
SELECT avg(grade) as avg
FROM sc
WHERE grade NOTNULL
GROUP BY sc.sno);

尝试过的

各种不行的解法(希望大佬指出错误帮忙纠正)

这个没有值的原因是空值在捣乱,查出来的这个是空值,加了NOTNULL就好了(见上方正解2)

本文地址:https://blog.csdn.net/RaynorFTD/article/details/109450866

《查询平均成绩最高的同学的姓名(SQL入门-查询语句)--PostgreSQL.doc》

下载本文的Word格式文档,以方便收藏与打印。