Group by:對Select查詢出來的資料集按照某個字段或者表達式進行分組,獲得一組組的集合,然後從每組中取出一個指定字段或者表達式的值。
我們需要注意的是:在使用Group By的SQL語句中,select中傳回的字段,必須滿足以下兩個條件之一:
- 包含在Group By語句的後面,作為分組的依據;
- 這些字段包含在聚合函數中。常見的聚會函數有:count,sum,MAX, AVG等
select city, count(*)from user where age= group by city
如果你這樣查詢是錯誤的:select city,age, count(*)from user where age=2 group by city
提示錯誤:選擇清單中的列 ‘user .age’ 無效,因為該列沒有包含在聚合函數或 GROUP BY 子句中。
Having:用于對where和group by查詢出來的分組經行過濾,查處出滿足條件的分組結果。是以Having的使用需要注意以下幾點:
- Having**隻能用于Group By** (分組統計語句中)
- WHERE 是用于在初始表中篩選查詢,HAVING用于在WHERE和GROUP BY 結果分組中查詢
- Having 子句中的每一個元素也必須出現在select清單中
- Having語句可以使用聚合函數,而where不使用。
select city, count(*) from user where age=22 group by city having count(*)>
如果你這樣查詢是錯誤的:select city, count(*) from user where age=22 group by city having age>4
提示錯誤:HAVING 子句中的列 ‘user .age’ 無效,因為該列沒有包含在聚合函數或 GROUP BY 子句中。