首先,where是針對單個語句的,having是針對組的。並且優先級是where>group by>having.
需要注意的是:
1.where 是不可以放在group by 之後的
2.having 和group by 連用,並且 放在group by 之後
3.where 之後不可聚合函數,即SUM( ) ,AVG( ) 等等。having可以。
聚合函數:
聚合函數就是統計函數。比如求和、求平均值、最大最小之類的。而group by 可以對這些統計函數對一組數據起作用。比如,我需要求各個階段內的平均值,則需要最各個階段進行分類,然後求平均。當然,where 也是可以達到要求的。
在查詢中,聚合語句(聚合函數)優先級要高於having(即先分類在統計),聚合語句的優先級低於where()即先單個篩選再進行統計。比如,我們要對部門中小於20的部門並且工資之和要大於10000的部門進行篩選。則:
select department_id, sum(salary) from group where department_id < 20 group by department_id having sum(salary) >10000;