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))
的意思就是让平均分保留两位小数而已