sql語法基礎,爲聚合結果指定條件

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章