查询平均成绩大于60分的学生的学号和平均成绩(简单,第二道重点)
分析题目:
求出平均成绩大于60分的同学
需要用到 AVG(列名)
返回某列的平均值,
SELECT
avg( s_score )
FROM
score
是计算出这一列的所有成绩平均值,而不是每个同学成绩的平均值,那么我们就需要进行分组用到GROUP BY
子句创建分组
SELECT
avg( s_score )
FROM
score
GROUP BY
s_id
获得每个学生的平均成绩,但是需要大于60分的成绩,对分组进行过滤,所用到的是HAVING
子句,在这里WHERE
不使用的原因是,WHERE
过滤的是行,没有分组的概念。
SELECT
s_id,
AVG( s_score )
FROM
score
GROUP BY
s_id
HAVING
avg( s_score ) > 60
在这里就算将题目完成,获取到平均成绩大于60分的学生的学号和平均成绩。
但是如果要进行拓展,完成与学生表的连接使用的是 inner join
内连接,同时需要将SQL语句中的AVG(s_score)
设置别名,如果不设置会找不到s_score
这个一列。
SELECT
st.*,
avgscore
FROM
student AS st
INNER JOIN ( SELECT s_id, AVG( s_score ) AS avgscore FROM score GROUP BY s_id HAVING avgscore > 60 ) AS s ON st.s_id = s.s_id