MySQL HAVING子句

在本教程中,咱們將學習如何使用MySQL HAVING子句來指定行分組或聚合的過濾條件。html

MySQL HAVING子句

MySQL的HAVING子句在SELECT語句中是用來爲某一組行或聚合指定過濾條件。mysql

MySQL的HAVING子句一般與GROUP BY子句一塊兒使用。當它在GROUP BY子句中使用時,咱們能夠應用它在GROUP BY子句以後來指定過濾的條件。若是省略了GROUP BY子句,HAVING子句行爲就像WHERE子句同樣。sql

請注意,HAVING子句應用篩選條件每個分組的行,而WHERE子句的過濾條件是過濾每一個單獨的行。數據庫

MySQL HAVING子句的示例

讓咱們來看看使用MySQL HAVING子句的例子。在這裏將使用示例數據庫(studymysql)中的 order_detail 表做爲示範。其表結構以下所示 - 

咱們可使用GROUP BY子句來得到訂單編號,每一個訂單銷售的產品數量,以及每一個訂單的總額:函數

SELECT
    order_id,
    SUM(buy_number)AS buy_count,
    SUM(total_money) AS money_count
FROM
    studymysql.order_detail
GROUP BY order_id;

執行上面的 SQL 語句後,獲得下面的結果 - 
學習

如今,要查找那些銷售總額超過 1500000 的訂單信息。使用MySQL HAVING子句和聚合函數以下:spa

SELECT
    order_id,
    SUM(buy_number)AS items_count,
    SUM(total_money) AS sum_total_money
FROM
    studymysql.order_detail
GROUP BY order_id
HAVING sum_total_money>1500000;

 

執行上面的 SQL 語句後,獲得下面的結果 - 

咱們還能夠構造並使用邏輯運算符,如在HAVING子句中OR和AND運算符實現更復雜一點的過濾條件。假設要查找 order 表中總銷售額大於100000,而且一個訂單中包含 6 種以上的產品,參考使用下面的查詢:htm

SELECT
    order_id,
    SUM(buy_number) AS items_count,
    SUM(total_money) AS total
FROM
    studymysql.order_detail
GROUP BY order_id
HAVING total>1000000 AND items_count>350;

執行上面的 SQL 語句後,獲得下面的結果 - 
教程

假設要查找已發貨(status=2)而且總銷售額超過 160000 的全部訂單,咱們能夠經過使用INNER JOIN子句將 order 錶鏈接 order_detail 表,並在 status 和 total 列上指定條件,以下查詢所示:get

SELECT
    od.order_id, SUM(od.total_money) total, o.status
FROM
    studymysql.order_detail od
        INNER JOIN
    studymysql.order o ON od.order_id=o.order_id
GROUP BY od.order_id
HAVING o.status='2' AND total>160000 ;

 

執行上面的 SQL 語句後,獲得下面的結果 - 

當咱們要經過GROUP BY子句來實現高級的報表輸出時,使用HAVING子句就很是有用了。例如,咱們可使用HAVING子句來實現一些相似的查詢,如:這個月,本季度和今年累計銷售額超過10000 的訂單信息。

在本教程中,您已經學會了如何使用MySQL HAVING子句在GROUP BY中來指定記錄或彙集組的篩選條件。
轉自:http://www.studymysql.com/mysql/having.html

相關文章
相關標籤/搜索