語法:
group by 字段 having 條件判斷;
group by的用法我已經在上一篇經驗中介紹了
還是已員工績效表為例
我們如果就是查詢每個部門成績大於89的員工數,可以這樣寫:
SELECT dept,COUNT(user_name) FROM ec_uses WHERE score>89 GROUP BY dept;
對這個查詢的過程進行分析,其實是:先查出績效成績大於89的員工記錄,然后再用count聚合函數統計部門的人數,也就是說where是在聚合之前篩選記錄的,那么如果我們要在聚合之后篩選記錄該如何處理呢?
例如,在上面的基礎上再加一個條件,查詢部門人數大於1的部門
那么我們是先要統計出每個部門的人數,也就是要用count聚合函數,然后再看哪些部門的人數是多於1人的
也就是篩選條件是在聚合之后的,這時where已不能滿足使用,我們就需要用到having了
sql:
SELECT dept,COUNT(user_name) count_tmp FROM ec_uses GROUP BY dept HAVING count_tmp>1;
看執行結果
所以having子句對我們篩選分組后的數據非常方便
值得注意的是having后面跟的條件判斷的字段必須是聚合函數返回的結果,否則sql會報錯,例如:
SELECT dept,COUNT(user_name) count_tmp FROM ec_uses GROUP BY dept HAVING score>1;