SQL Server資料查詢之彙總函式與分組查詢

來源:互聯網
上載者:User
文章目錄
  • SQL GROUP BY 文法
  • SQL HAVING 文法

二:彙總函式與分組查詢

1.彙總函式

常用的彙總函式有 :AVG(all/ distinct 欄位名),COUNT(all/distinct 欄位名),MAX(欄位名),MIN(欄位名),SUM(欄位名)

2.分組查詢

GROUP BY 語句

GROUP BY 語句用於結合合計函數,根據一個或多個列對結果集進行分組。

SQL GROUP BY 文法
SELECT column_name, aggregate_function(column_name)FROM table_nameWHERE column_name operator valueGROUP BY column_name
SQL GROUP BY 執行個體

我們擁有下面這個 "Orders" 表:

O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter

現在,我們希望尋找每個客戶的總金額(總訂單)。

我們想要使用 GROUP BY 語句對客戶進行組合。

我們使用下列 SQL 陳述式:

SELECT Customer,SUM(OrderPrice) FROM OrdersGROUP BY Customer

結果集類似這樣:

Customer SUM(OrderPrice)
Bush 2000
Carter 1700
Adams 2000

很棒吧,對不對?

讓我們看一下如果省略 GROUP BY 會出現什麼情況:

SELECT Customer,SUM(OrderPrice) FROM Orders

結果集類似這樣:

Customer SUM(OrderPrice)
Bush 5700
Carter 5700
Bush 5700
Bush 5700
Adams 5700
Carter 5700

上面的結果集不是我們需要的。

那麼為什麼不能使用上面這條 SELECT 語句呢?解釋如下:上面的 SELECT 語句指定了兩列(Customer 和 SUM(OrderPrice))。"SUM(OrderPrice)" 返回一個單獨的值("OrderPrice" 列的總計),而 "Customer" 返回 6 個值(每個值對應 "Orders" 表中的每一行)。因此,我們得不到正確的結果。不過,您已經看到了,GROUP BY 語句解決了這個問題。

GROUP BY 一個以上的列

我們也可以對一個以上的列應用 GROUP BY 語句,就像這樣:

SELECT Customer,OrderDate,SUM(OrderPrice) FROM OrdersGROUP BY Customer,OrderDate

 

 

HAVING 子句

在 SQL 中增加 HAVING 子句原因是,WHERE 關鍵字無法與合計函數一起使用。

SQL HAVING 文法
SELECT column_name, aggregate_function(column_name)FROM table_nameWHERE column_name operator valueGROUP BY column_nameHAVING aggregate_function(column_name) operator value
SQL HAVING 執行個體

我們擁有下面這個 "Orders" 表:

O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter

現在,我們希望尋找訂單總金額少於 2000 的客戶。

我們使用如下 SQL 陳述式:

SELECT Customer,SUM(OrderPrice) FROM OrdersGROUP BY CustomerHAVING SUM(OrderPrice)<2000

結果集類似:

Customer SUM(OrderPrice)
Carter 1700

現在我們希望尋找客戶 "Bush" 或 "Adams" 擁有超過 1500 的訂單總金額。

我們在 SQL 陳述式中增加了一個普通的 WHERE 子句:

SELECT Customer,SUM(OrderPrice) FROM OrdersWHERE Customer='Bush' OR Customer='Adams'GROUP BY CustomerHAVING SUM(OrderPrice)>1500

結果集:

Customer SUM(OrderPrice)
Bush 2000
Adams 2000
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.