sql grop by having order by 的用法
阿新 • • 發佈:2019-01-29
GROUP BY 語句
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 Orders GROUP 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 語句解決了這個問題。
having 用法
having 的使用是由於where不能與聚合函式進行一起使用 ,having在使用的過程中只能用在group by 後面,針對分組的結果進行篩選。
示例:表示按照name進行分組後取出name欄位重複的元素
1 |
SELECT "count" (name) ,name from an_name GROUP BY name HAVING "count" (*)>1
|
order by
order by 表示排序 asc 升序 ,desc 降序
當一個查詢語句同時出現了where,group by,having,order by (這個順序也是sql在編寫時候的順序)的時候,執行順序和編寫順序是: 1.執行where xx對全表資料做篩選,返回第1個結果集。 2.針對第1個結果集使用group by分組,返回第2個結果集。 3.針對第2個結果集中的每1組資料執行select xx,有幾組就執行幾次,返回第3個結果集。 4.針對第3個結集執行having xx進行篩選,返回第4個結果集。5.針對第4個結果集排序。
6.分組欄位必須包含在查詢欄位裡。