有group by才能having子句,只有满足“条件表达式”中指定的条件的才能够输出。
一、 having子句可以让我们筛选成组后的各种数据,where子句在聚合前先筛选记录,也就是说作用在group by和having子句前。而having子句在聚合后对组记录进行筛选。
格式:
select 类别, sum(数量) as 数量之和 from A group by 类别 having sum(数量) > 18;
示例:
select 字段 from 表名 where 条件;
2、Having和Where的联合使用方法。
格式:
select 类别, SUM(数量)from A where 数量 >8 group by 类别 having SUM(数量) >10;
示例:
select 字段 from 表名 where 条件;
where和having的区别: 作用的对象不同。WHERE 子句作用于表和视图,HAVING 子句作用于组。
where在分组和聚集计算之前选取输入行【因此,它控制哪些行进入聚集计算】, 而 having在分组和聚集之后选取分组的行。因此,WHERE 子句不能包含聚集函数。
相反,having子句总是包含聚集函数。
综上所述: having一般跟在group by之后,执行记录组选择的一部分来工作的。where则是执行所有数据来工作的。