前面我们学过使用group by语句进行分组
那么如何选择我们需要的分组呢?
01HAVING子句
格式:
SELECT 列名1,列名2,列名3
FROM 表名
GROUP BY 列名1,列名2,
HAVING分组对应的条件
例一:取出包含的数据行为2的商品
SELECT product_type ,COUNT(*)
FROM PRODUCT
HAVING COUNT(*)=2
GROUP BY product_type
执行
注意:having语句必须放在group by后面
因为having’语句是根据条件,筛选分组的,没有分组谈何筛选?
正确的书写如下
SELECT product_type ,COUNT(*)
FROM PRODUCT
GROUP BY product_type
HAVING COUNT(*)=2
执行
例2
SELECT product_type ,COUNT(*)
FROM PRODUCT
GROUP BY product_type
HAVING product_name='t恤'
注意:报错的原因是因为在having子句中出现了没有在group by子句中出现的product_name=‘t恤’
HAVING子句执行路线
FROM→WHERE→GROUP BY→HAVING→SELECT
分组之后的表并不存在product_name='t恤’这个列,又怎么能对不存在的列设定条件呢?
02having子句更合适写在where子句条件
我们先来看下下面的例子
SELECT product_type,COUNT(*)
FROM PRODUCT
GROUP BY product_type
HAVING product_type = '衣服'
SELECT product_type,COUNT(*)
FROM PRODUCT
WHERE product_type = '衣服'
GROUP BY product_type
乍一看,两个结果一样,甚至觉得having语句和where语句可以通用。
但是这面还是建议,聚合键使用having子句。
行所对应条件使用where子句。
可以归纳为下面的公式:
WHERE子句=行所对应条件
HAVING子句=组所对应的条件