MySQL數據分組Group By 和 Having


現有以下的學生信息表:

若果現在想計算每個班的平均年齡,使用where的操作如下:

SELECT Cno AS 班級, AVG(Sage) AS 平均年齡 FROM stu Where Cno=5;

 

這樣的話,有多少個班就需要操作幾次

 

因此引入分組 GROUP BY子句,根據列來分組,先看一下《MySQL必知必會》的提示:

 

 

引入分組后,操作如下:

SELECT Cno AS 班級,AVG(Sage) AS 平均年齡 FROM stu GROUP BY Cno;

 

 

由此可以理解,GROUP BY 根據給出的列進行分組,具有相同列屬性的被分到一組,然后你需要對組內的數據執行什么操作,就和平常的一樣,只是操作的不再是所有的數據,而是分組后的。

 

過濾分組

使用GROUP BY將數據分組后,還可以使用HAVING過濾分組,規定包括哪些分組,排除哪些分組,比如想在上述的學生信息表中,找出多於2個人的班級,使用以下的操作

SELECT Cno AS 班級,COUNT(Cno) AS 人數 FROM stu GROUP BY Cno HAVING COUNT(Cno)>=2;

 

關於HAVING和WHERE的區別 《MySQL必知必會》

HAVING和WHERE的差別  這里有另一種理解方法,WHERE在數據 分組前進行過濾,HAVING在數據分組后進行過濾。

這是一個重 要的區別,WHERE排除的行不包括在分組中。這可能會改變計 算值,從而影響HAVING子句中基於這些值過濾掉的分組。 

從sql語句上而言,WHERE是寫在GROUP BY前的,而HAVING是在GROUP BY后的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM