一,实例引入
写一个SQL语句,一个表中有姓名、课程、成绩,请你查询出平均分大于60分的同学的名字。
SELECT name
FROM student_scores
GROUP BY name
HAVING AVG(score) > 60;
这条SQL语句的工作原理如下:
FROM student_scores
:指定查询的表名。GROUP BY name
:按照学生的姓名对成绩进行分组,这样每个学生的成绩就会聚集在一起。HAVING AVG(score) > 60
:筛选出那些平均成绩超过60分的学生。注意这里使用HAVING
而不是WHERE
,因为HAVING
用于对分组后的结果进行条件过滤,而WHERE
用于对行进行条件过滤。
二,where和having的区别在哪?为什么上文不用where筛选结果?
HAVING
和WHERE
子句在SQL中都用于添加条件过滤,但它们的使用场景和作用对象不同:
WHERE子句
- 使用场景:
WHERE
子句用于在对数据进行分组前,筛选表中的行。它可以过滤掉不满足条件的行,确保只有满足条件的行才会被包括在分组或计算中。 - 作用对象:
WHERE
子句直接作用于原始数据表中的每一行数据。它在数据被分