4.2.2 HAVING与WHERE子句
2020年3月30日
17:46
HAVING与WHERE子句：
（1）HAVING在分组后使用，WHERE在分组前使用
（2）运算顺序：WHERE优先于HAVING
（3）作用对象不同，WHERE只作用于表，而HAVING作用于GROUP BY子句的分组结果，如果不存在GROUP BY子句，则作用于WHERE子句的搜索结果，如果WHERE子句也不存在，则直接作用于表。
（4）计算对象不同，HAVING是用于组的计算，WHERE则计算指定字段的每条记录。
（5）孙兴华总结：凡是表里没有这个字段的时候（你自造的字段）必需用HAVING。否则建议用WHERE，因为根据计算规则，它的性能更优。
例1：2020年1月1日这一天，各店铺最小销售数量
SELECT 店号,MIN(销售数量) AS 最小销售量  FROM `销售表` WHERE 日期 = '2020-01-01' GROUP BY 店号;
例2：哪个小类的商品个数大于2     （提到个数先想到哪个函数？）   
count(*)>2  但是他不能做where子句条件，因为哪家表里都没有count(*)这个字段，详见（4）
SELECT 小类名,COUNT(*) AS 商品个数 FROM `商品表` GROUP BY 小类名 HAVING COUNT(*)>2;
条件这个字段不存在于这张表中的时候，我们使用HAVING，如果存在，那么WHERE（前面日期存在，所以可以用where，后面求个数大于2，不存在这个字段，所以用having）
例3：查询每个店铺2020年1月1日至1月3日最高销量大于250
SELECT 店号,MAX(销售数量) AS 最大销量
FROM `销售表`
WHERE 日期 BETWEEN'2020-01-01' AND '2020-01-03'
GROUP BY 店号
HAVING 最大销量>250;