1.where和having的區別
2.聚合函數和group by
3.where 和having的執行順序
4.where不能使用聚合函數、having中可以使用聚合函數
1.where和having的區別
where:
where是一個約束聲明,使用where來約束來自數據庫的數據;
where是在結果返回之前起作用的;
where中不能使用聚合函數。
having:
having是一個過濾聲明;
在查詢返回結果集以后,對查詢結果進行的過濾操作;
在having中可以使用聚合函數。
2.聚合函數和group by
聚合函數就是例如SUM, COUNT, MAX, AVG等對一組(多條)數據操作的函數,需要配合group by 來使用。
#如:
SELECT SUM(population),region FROM T01_Beijing GROUP BY region; //計算北京每個分區的人數
3.where和having的執行順序
where 早於 group by 早於 having
where子句在聚合前先篩選記錄,也就是說作用在group by 子句和having子句前,而 having子句在聚合后對組記錄進行篩選
4.where不能使用聚合函數、having中可以使用聚合函數
#篩選出北京西城、東城、海淀及各區學校數量
SELECT region,count(school)
FROM T02_Bejing_school
WHERE region IN ('海淀' , '西城' , '東城') GROUP BY region;
#篩選出北京西城、東城、海淀三個區中學校數量超過10所的區及各區學校數量。
SELECT region,count(school)
FROM T02_Bejing_school
WHERE region IN ('海淀' , '西城' , '東城')
GROUP BY region HAVING count(school) > 10;
注意!我們不能用where來篩選超過學校數量超過10的區,因為表中不存在這樣一條記錄。而HAVING子句可以讓我們篩選成組后的各組數據.