MySQL之分組函數

分組函數


分組函數是對錶中的一組記錄進行操作,每組返回一個結果。
分組函數一共5個

  • COUNT  求總數
  • SUM    求總和
  • AVG     求平均數
  • MAX    求最大數
  • MIN     求最小數


分組函數的特點


  • 分組函數自動忽略NULL,例如下面的查詢
SELECT COUNT(time) FROM act_user;

如果time中存在NULL字段,那麼分組函數自動忽略。

  • 要想列值爲NULL也參與函數的計算,必須使用IFNULL函數對NULL值做裝換。
  • 不允許出現嵌套


COUNT(*)和COUNT(time)區別


COUNT(*)求的是記錄的總條數,COUNT(time)求的是time這一字段非空的總數


使用GROUP BY創建數據組


如果沒有GROUP BY操作,默認是將所有數據作爲一組進行操作,使用GROUP BY可以將數據分爲不同的組,再使用分組函數。

SELECT COUNT(*) FROM act_user GROUP BY roleid

對於分組所使用的SELECT,後面只能跟上分組函數和當前所分組項。

SELECT COUNT(*),roleid FROM act_user GROUP BY roleid

如果分組條件有多個,我們可以在GROUP BY後添加多個參數

SELECT COUNT(*),roleid FROM act_user GROUP BY roleid,department



GROUP BY和HAVING


HAVING是GROUP BY的搭檔,只有GROUP BY出現時,HAVING才能用,沒有GROUP BY,HAVING無法使用,HAVING對分完組後的數據進行過濾。
HAVING與WHERE作用相似,不過WHERE是在獲得結果集之前進行條件過濾,HAVING是在獲得結果集之後甚至是已經將結果集分組之後才進行的。

SELECT COUNT(*),roleid FROM act_user GROUP BY roleid,department HAVING roleid=1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章