为聚合结果指定条件
学习重点
使用 COUNT 函数等对表中数据进行汇总操作的时候,为其指定条件的不是 WHERE 子句,而是 Having 子句
聚合函数可以在 SELECT 子句,HAVING 子句和 ORDER BY 子句中使用
HAVING 子句要写在 GROUP BY 子句之后
WHERE 子句 用来指定数据行的条件 HAVING 子句用来指定分组的条件
Having 子句
- Having 子句是用来和 Group BY 子句一起配套使用,它是用来帮助 GROUP BY 在分组的
Having 子句必须要写在 GroupBy 子句的后面
基本语法
SELECT <列名1>,<列名2>,<列名3> ....
FROM <表名>
GROUP BY <列名1>,<列名2>,<列名3>
Having <分组结果的对应条件>
使用 Having 子句的时候 SELECT 顺序是这样的
SELECT-> FROM -> WHERE-> GROUP BY -> HAVING
举例
SELECT product_type,COUNT(*) FROM Product GROUP BY product_type HAVING COUNT(*) = 2;
结果
Having 是对 GROUP BY 的 第二次筛选,筛选出符合条件的
HAVING 子句的构成要素
Having 子句能够使用的三种要素如下:
常数
聚合函数
GROUP BY 子句中指定的列名(聚合键)
比如下面的就是错误的示范
SELECT product_type,COUNT(*) FROM Product GROUP BY product_type HAVING product_name = '打孔器'
因为 product_type COUNT(*)根本没有 product_name 这个列 所以这样查询根本出不来,会直接报错