有重复的数据行,才有分组并统计的可能性。
如果没有重复的数据行,就没有分组的意义。
SELECT子句中只能出现分组字段和聚合函数。
聚合函数,聚合的是根据分组聚合的,每一个组就相当于一个表。
在讲解HAVING具体做法之前,首先来看这样一个查询。
范例:查询出平均工资高于1200的所有职位信息,以及该职位对应的人数和平均工资。
对于数据的筛选,实际上只学习过了WHERE子句,所以现在自然可以联想到我们应该基于WHERE实现。

执行报错:

为什么会出这样的错呢?
大家都知道,分组统计是先分组再统计。
- 按照SQL执行顺序,①WHERE②GROUP③SELECT④ORDER BY
语句执行过程:
图片.png
分组后进行的过滤统计是要求在HAVING子句中实现的。
之前的语法:
图片.png
现在的语法:
图片.png
原来的写法:

现在的写法:

总结:
WHERE是在GROUP BY分组前进行使用,表示对要分组的数据进行筛选定义,
不允许使用统计函数!!!
。HEAVING是在GROUP BY之后使用(执行),允许使用统计函数,针对于分组后的数据进行筛选。
当我们学完HAVING之后,SQL标准语法的查询就是这样的:

网友评论