爲什麼sql語句中where後面不能直接跟分組函數?--詳解

當我們錯誤的使用分組函數之後,mysql會報錯,提示“ Invalid use of group function”,這就是今天要說的問題:where後面不能直接跟分組函數。

分組函數有五種count、sum、avg、max、min

 

爲什麼他們不能跟在where後面?

這幾個函數在使用時一般都和group by聯合使用,原理是先分組在進行函數計算。

當然我們在平常使用時,有這種情況。

select max(age) from t_student

這個sql語句中並沒有group by,但還是可以使用分組函數max。這是因爲當sql語句種沒有手動使用group by時,那整個調用的表默認是一個分組。max函數是在這個大分組中取的最大值。所以我們就可以知道,應該是先分組,再調用分組函數,這樣的邏輯。

 

接下來我們瞭解下sql語句執行的順序

例:從學生表t_student中篩選出3年級年齡最大的女孩兒們,結果按照學號id升序

select max(age) from t_student where grade = 3 group by sex having sex = girl order by studentID asc

第一步:from 選擇表

第二步:where 篩選條件,篩選對象--行

第三步:group by 將篩選出來的數據進行分組

第四步:having 篩選條件,篩選對象--組

第五步:select 選取最後的結果

第六步:order by 將結果按照特定順序排列

 

從上面的執行順序我們又知道了先執行where,後group by分組,分組完之後才能使用分組函數。

所以where後面的篩選條件出現了分組函數那就會報錯。還沒有進行分組呢,不能使用分組函數。

當我們遇到這種情況時,就要改變思路,用子查詢即可,where後面跟一個子查詢就迎刃而解了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章