SQL必知必會-筆記(六)分組數據
阿新 • • 發佈:2019-02-01
概念 item 問題: 問題 技術 tro 大於 class 圖片
為什麽需要分組?
先來看一個問題,如果需要返回供應商DLL01提供的產品數目,SQL如下:
select count(*) from Products where vend_id = ‘DLL01‘;
那麽如果要返回每個供應商提供的產品數目呢?這時就可以使用分組將數據分為多個邏輯組,對每個組進行聚集計算。
select vend_id, count(*) as num_prods from Products group by vend_id;
註意,GROUP BY
必須出現在WHERE
之後,ORDER BY
之前。
過濾分組
再來看一個問題,如果需要檢索出每個客戶的訂單數量,根據上面所學,SQL如下:
select cust_id, count(*) as orders from Orders group by cust_id;
現在有個新的問題,需要檢索出兩個訂單以上的客戶,怎麽做?
像這樣?
select cust_id, count(*) as orders from Orders group by cust_id where count(*) >=2;
很明顯,這是錯誤寫法,因為WHERE
是過濾指定的行,沒有分組的概念。過濾分組需要使用HAVING
。
select cust_id, count(*) as orders from Orders group by cust_id having count(*) >=2;
可以這麽理解,WHERE
在數據分組前進行過濾,HAVING
在數據分組後進行過濾。
- 問題:檢索出具有兩個以上產品且價格大於等於4的供應商
- 解:
select vend_id, count(*) as num_prods from Products where prod_price >= 4 group by vend_id having count(*) >=2;
最後再來看一個問題,
- 問題:檢索出包含3個或更多物品的訂單號以及訂購物品的數量,且按照訂購物品的數量排序
- 解:
select order_num,count(*) as items from OrderItems group by order_num having count(*) >=3 order by items,order_num;
SQL必知必會-筆記(六)分組數據