HAVING子句

有重复的数据行,才有分组并统计的可能性。
如果没有重复的数据行,就没有分组的意义。
SELECT子句中只能出现分组字段和聚合函数。
聚合函数,聚合的是根据分组聚合的,每一个组就相当于一个表。

在讲解HAVING具体做法之前,首先来看这样一个查询。
范例:查询出平均工资高于1200的所有职位信息,以及该职位对应的人数和平均工资。
对于数据的筛选,实际上只学习过了WHERE子句,所以现在自然可以联想到我们应该基于WHERE实现。


图片.png

执行报错:


图片.png

为什么会出这样的错呢?
大家都知道,分组统计是先分组再统计。
  • 按照SQL执行顺序,①WHERE②GROUP③SELECT④ORDER BY
    语句执行过程:
    图片.png

    分组后进行的过滤统计是要求在HAVING子句中实现的。
    之前的语法:
    图片.png

    现在的语法:
    图片.png

原来的写法:

图片.png

现在的写法:
图片.png

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

你可能感兴趣的:(HAVING子句)