正文
介紹
合計函式 (比如 SUM) 常常需要添加 GROUP BY 語句。
GROUP BY 語句
GROUP BY 語句用於結合合計函式,根據一個或多個列對
結果集進行分組。
SQL GROUP BY 語法
SELECT column_name, aggregate_function(column_name)FROM table_name WHERE column_name operator valueGROUP BY column_name
實例
我們擁有下面這個 "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 Orders GROUP BY Customer
結果集類似這樣:
Customer
| SUM(OrderPrice)
|
---|
Bush
| 2000
|
Carter
| 1700
|
Adams
| 2000
|
SELECT Customer,SUM(OrderPrice) FROM Orders
(該語句無法正常運行,原因是Customer沒有使用聚合函式,所以必須被包含在GROUP BY 語句中,該語句僅供示例使用,實際上無法運行)。所有被select的項(除sum的項之外),都必須出現在group by 中。
結果集類似這樣:
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 語句,就像這樣:
SELECT Customer,OrderDate,SUM(OrderPrice) FROM OrdersGROUP BY Customer,OrderDate
特別注意:
group by 有一個原則,就是 select 後面的所有列中,沒有使用
聚合函式的列,必須出現在 group by 後面。