當(dāng)前位置:首頁(yè) > IT技術(shù) > 數(shù)據(jù)庫(kù) > 正文

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

分組

一個(gè)表中有很多供應(yīng)商,每個(gè)供應(yīng)商都有很多商品,假設(shè)要返回每個(gè)供應(yīng)商提供的產(chǎn)品數(shù)目,這時(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ù)目的列。這使得能對(duì)分組進(jìn)行嵌套,為數(shù)據(jù)分組提供更細(xì)致的控制。
  • 如果在GROUP BY子句中嵌套了分組,數(shù)據(jù)將在最后規(guī)定的分組上進(jìn)行匯總。換句話說,在建立分組時(shí),指定的所有列都一起計(jì)算(所以不能從個(gè)別的列取回?cái)?shù)據(jù))。
  • GROUP BY 子句中列出的每個(gè)列都必須是檢索列或有效的表達(dá)式 (但不能是聚集函數(shù))。如果在 SELECT 中使用表達(dá)式, 則必須在GROUP BY子句中指定相同的表達(dá)式。不能使用別名。
  • 除聚集計(jì)算語(yǔ)句外,SELECT語(yǔ)句中的每個(gè)列都必須在GROUP BY子句中給出。
  • 如果分組列中具有NULL值,則NULL將作為一個(gè)分組返回。如果列中有多行NULL值,它們將分為一組。
  • GROUP BY子句必須出現(xiàn)在WHERE子句之后,ORDER BY子句之前

過濾分組

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

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

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

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

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

開通會(huì)員,享受整站包年服務(wù)立即開通 >