having字句可以讓我們篩選分組之后的各種數據,where字句在聚合前先篩選記錄,也就是說作用在group by和having字句前。
而having子句在聚合后對組記錄進行篩選。我的理解就是真實表中沒有此數據,這些數據是通過一些函數產生的。
一、顯示每個地區的總人口數和總面積.
SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY region
先以region把返回記錄分成多個組,這就是GROUP BY的字面含義。分完組后,然后用聚合函數對每組中
的不同字段(一或多條記錄)作運算。
二、 顯示每個地區的總人口數和總面積.僅顯示那些面積超過1000000的地區。
SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region
HAVING SUM(area)>1000000
在這里,我們不能用where來篩選超過1000000的地區,因為表中不存在這樣一條記錄。
相反,having子句可以讓我們篩選分組后的各組數據
三、 having單獨使用,與where類似
eg: 查詢單筆訂單充值金額大於1000的
SELECT regagent,amount FROM `cy_pay_ok` having amount>1000 ;
SELECT regagent,amount FROM `cy_pay_ok` where amount>1000 ;
兩個查詢結果一樣