?注意兩點:
? ? 1缝裁、所謂分類匯總,就是說SELECT后邊不是分類字段就是匯總的字段.分類就是和group by后邊的字段一致,匯總就是有聚集函數(shù)的字段
? ? 2扫皱、SELECT后面的在聚合函數(shù):Sum、Avg压语、Min啸罢、Max编检、Count中的列名不用出現(xiàn)在group by 后面中胎食,其他的列都要
? ? 學(xué)生評教系統(tǒng)做完了,在測試的時候允懂,遇到這樣一個問題厕怜,多人對同一個教師評分后,分數(shù)統(tǒng)計完畢會出現(xiàn)成績統(tǒng)計混亂的問題蕾总,后來找到了問題的癥結(jié):原來是Group By 在作怪粥航。下面簡單總結(jié)下Group By,以便今后少犯錯誤生百!
Group By 語句用于結(jié)合合計函數(shù),根據(jù)一個或多個列對結(jié)果集進行分組蚀浆。
?注:合計函數(shù),又稱聚合函數(shù)(Aggregate Function):查詢中使用表中一個數(shù)據(jù)列中所有數(shù)據(jù)行的數(shù)據(jù)進行運算的函數(shù)缀程,例如SUM(求和),AVG(求平均值),COUNT(記錄個數(shù)),MAX(求最大值)市俊,MIN(求最小值)杨凑。
? ? ?我們擁有下面這個“Orders”表
? ? 現(xiàn)在我們希望查找每個教師對應(yīng)的成績(總成績)撩满。我們需要使用Group By 語句對客戶進行組合。
? ? 我們使用下列SQL語句。? ? ? ? ??
? ? 效果還行吧伺帘,是不昭躺?
? ? 讓我們看一下如果省略Group By 會出現(xiàn)什么情況:
? ? 上面的結(jié)果集不是我們需要的。
? ? 那么為什么不能使用上面這條 SELECT 語句呢伪嫁?解釋如下:上面的 SELECT 語句指定了兩列(Customer 和 SUM(OrderPrice))窍仰。"SUM(OrderPrice)" 返回一個單獨的值("OrderPrice" 列的總計),而 "Customer" 返回 6 個值(每個值對應(yīng) "Orders" 表中的每一行)礼殊。因此驹吮,我們得不到正確的結(jié)果。不過晶伦,您已經(jīng)看到了碟狞,GROUP BY 語句解決了這個問題。
看完前面的介紹族沃,然后描述一下我在項目中遇到的問題背景:我們做的是一個評教系統(tǒng),學(xué)生對教師評分完畢泌参,分數(shù)統(tǒng)計在所難免脆淹,我寫了一個存儲過程完成了分數(shù)的統(tǒng)計,結(jié)果分數(shù)統(tǒng)計結(jié)果不像我想的那樣沽一,郁悶了半天盖溺,原來是Group By在搞怪,我錯誤的將聚合函數(shù)的列名寫在了Group By后面铣缠。
?統(tǒng)計結(jié)果展示:
? ? 有兩個學(xué)生對教師打分烘嘱,其中一個學(xué)生對兩個教師打分,另一個學(xué)生只對一個教師打分蝗蛙,評分項目是5項蝇庭,因此項目成績表中數(shù)據(jù)條數(shù)為15條。
? ? ?經(jīng)過統(tǒng)計后捡硅,正確的查詢結(jié)果應(yīng)該是
? ? ?Group By后誤加聚合函數(shù)字段的結(jié)果
? ?展覽一下正確與錯誤的sql統(tǒng)計語句區(qū)別在哪里
? ? 進行至此哮内,對Group By 應(yīng)該有了大致的了解,使用時要注意使用約束哦壮韭!