前面我們學過使用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子句=組所對應的條件