天天看點

Sql- Group By ,having 分組查詢

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 子句中。