Question03-查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩

问题

  • 查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩
    • 这题主要靠的就是分组和基础的表连接

解决1:

  • SQL语句如下所示

    • SELECT stu.`SID` 学生编号, stu.`Sname` 学生姓名, AVG(sc.`score`) 平均成绩 
      FROM Student stu
      LEFT JOIN SC sc ON stu.`SID` = sc.`SID`
      GROUP BY stu.`SID`, stu.`Sname` 
      HAVING AVG(sc.`score`) >= 60;
      
  • 查询结果如下所示

解决2:

  • SQL语句如下所示

    • SELECT stu.`SID`, stu.`Sname`, CAST(AVG(sc.`score`) AS DECIMAL(18,2)) avg_score
      FROM Student stu, SC sc
      WHERE stu.`SID` = sc.`SID`
      GROUP BY stu.`SID`, stu.`Sname`
      HAVING CAST(AVG(sc.`score`) AS DECIMAL(18,2)) >= 60;
      
  • 查询结果如下所示

  • 不难看出,这里只不过是用了一些函数,跟上面的搜索结果没有太大的区别

    • CAST函数

      • 把一个字段转成另一个字段
      • 语法为:Cast(字段名 as 转换的类型 )
    • DECIMAL(18,2)(DECIMAL精度和小数位数的默认值分别是18与0。如果在decimal类型中不提供这两个值,那么默认四舍五入)

      • 精度和小数位数的设置是18和2。 如果超过了2位小数,则将超过的部分进行四舍五入,最后保留2位小数
  • 所以这里CAST(AVG(sc.score) AS DECIMAL(18,2))的意思就是让平均分保留两位小数而已

posted @ 2022-08-09 20:53  OnlyOnYourself-Lzw  阅读(979)  评论(0编辑  收藏  举报