GROUP BY是SQL中用來(lái)進(jìn)行數(shù)據(jù)分組的語(yǔ)句,這個(gè)語(yǔ)句使用時(shí)稍有不慎就會(huì)報(bào)錯(cuò)。
GROUP BY
作用
GROUP BY語(yǔ)句是將查詢到的數(shù)據(jù)進(jìn)行分組,分成各個(gè)區(qū)域,再對(duì)每個(gè)區(qū)域的數(shù)據(jù)進(jìn)行處理。使用
比如有一個(gè)“student”表保存了本班學(xué)生的個(gè)人信息和選修的課程等數(shù)據(jù)。
SELECT stu_name,course FROM student;
這個(gè)查詢語(yǔ)句會(huì)返回每個(gè)同學(xué)所選的課程,有許多重復(fù)課程。
如果查看每個(gè)課程選擇的人數(shù):
SELECT course,COUNT(*) FROM student GROUP BY course;
這將返回學(xué)生選擇每個(gè)課程的總和,因?yàn)?strong>ORDER BY子句依據(jù)course字段將數(shù)據(jù)按照課程名稱分組,名稱相同課程合并到了一組,再通過(guò)COUNT()*函數(shù)計(jì)算重復(fù)的數(shù)量,得到總和值,也就是學(xué)生數(shù)。
- 注意
如果這么寫(xiě):
SELECT stu_name,course FROM student GROUP BY course;
就會(huì)報(bào)錯(cuò)!因?yàn)椴槌?strong>stu_name和course兩列數(shù)據(jù)后,數(shù)據(jù)庫(kù)根據(jù)GROUP BY后的course字段進(jìn)行分組,這樣課程名相同的數(shù)據(jù)分到了一組,最后只會(huì)以一行的數(shù)據(jù)顯示。
那么問(wèn)題來(lái)了,stu_name字段的數(shù)據(jù)呢?這個(gè)字段并沒(méi)有進(jìn)行分組,也就是說(shuō)該字段數(shù)據(jù)沒(méi)有像course字段一樣合并,問(wèn)題就是在這里:數(shù)據(jù)庫(kù)并不能顯示出這樣“一對(duì)多”的數(shù)據(jù),同時(shí)顯示合并后的course字段和未合并的stu_name字段在一行(因?yàn)橐粋€(gè)數(shù)據(jù)格只能放一個(gè)數(shù)據(jù))。