查询有两门以上课程超过80分的学生id及其平均成绩

最近在练习sql,同一个查询写了两次,然后犯了一个错误

第一次(正确)

SELECT student_id ,SUM(score)/count(course_id)
FROM score s1
WHERE (
	SELECT count(*) FROM score s2
	WHERE s1.student_id = s2.student_id AND s2.score > 80
) > 2
GROUP BY student_id

 查询结果

student_id  SUM(score)/count(course_id)
1	        67.2222
2	        68.2222
4	        83.4000
6	        80.8571

 第二次(错误)

SELECT student_id , AVG(score)
FROM score
WHERE score > 80
GROUP BY student_id HAVING COUNT(course_id) > 2;

 查询结果

student_id  AVG(score)
1	        95.6667
2	        95.6667
4	        92.6667
6	        96.7500

第一次,对于大于80和统计平均分是分开算的,筛选大于80的时候只是把不符合两门以上课程超过80分的学生筛选掉,没有影响统计平均值。

而第二次统计平均值和筛选>80是在一起的,在筛选数据的时候是把全部的成绩<80的数据全部筛选掉,并不是筛选的学生

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值