最近在练习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的数据全部筛选掉,并不是筛选的学生