當前位置:首頁 > IT技術(shù) > 數(shù)據(jù)庫 > 正文

MySql分組數(shù)據(jù)
2021-10-07 11:26:22

分組

一個表中有很多供應商,每個供應商都有很多商品,假設要返回每個供應商提供的產(chǎn)品數(shù)目,這時候用前面提到的聚集函數(shù)無法完成,這是需要使用分組功能

SELECT vend_id , COUNT(*) AS num_prods
FROM products
GROUP BY vend_id;
vend_id num_prods
1001 2
1002 4
1003 12

在具體使用GROUP BY子句前,需要知道一些重要的規(guī)定:

  • GROUP BY子句可以包含任意數(shù)目的列。這使得能對分組進行嵌套,為數(shù)據(jù)分組提供更細致的控制。
  • 如果在GROUP BY子句中嵌套了分組,數(shù)據(jù)將在最后規(guī)定的分組上進行匯總。換句話說,在建立分組時,指定的所有列都一起計算(所以不能從個別的列取回數(shù)據(jù))。
  • GROUP BY 子句中列出的每個列都必須是檢索列或有效的表達式 (但不能是聚集函數(shù))。如果在 SELECT 中使用表達式, 則必須在GROUP BY子句中指定相同的表達式。不能使用別名。
  • 除聚集計算語句外,SELECT語句中的每個列都必須在GROUP BY子句中給出。
  • 如果分組列中具有NULL值,則NULL將作為一個分組返回。如果列中有多行NULL值,它們將分為一組。
  • GROUP BY子句必須出現(xiàn)在WHERE子句之后,ORDER BY子句之前

過濾分組

分組的過濾使用是HAVING子句。HAVING非常類似于WHERE,目前為止所學過的所有類型的 WHERE 子句都可以用 HAVING 來替代。 唯一的差別是 WHERE過濾行,而HAVING過濾分組

下面是一個復雜的查詢,它返回具有兩個以上訂單并且訂單價格不低于10元的顧客

SELECT vend_id, COUNT(*) AS num_prods
FROM products
WHERE prod_price >= 10
GROUP BY vend_id
HAVING COUNT(*) >= 2;

注意:一般在使用GROUP BY子句時,應該也給出ORDER BY子句,因為GROUP BY輸出可能不是分組的順序。所以為了保證數(shù)據(jù)正確的排序,提供ORDER BY是唯一的方法。千萬不要僅依賴GROUP BY默認排序數(shù)據(jù)

本文摘自 :https://www.cnblogs.com/

開通會員,享受整站包年服務立即開通 >