https://blog.csdn.net/xiao1_1bing/article/details/81109353
首先,創建數據表如下:
1、數據分組(GROUP BY):
SQL中數據可以按列名分組,搭配聚合函數十分實用。
例,統計每個班的人數:
SELECT student_class,COUNT(ALL student_name) AS 總人數 FROM t_student GROUP BY (student_class);
AS為定義別名,別名的使用在組合及聯接查詢時會有很好的效果,之后再說。
分組中也可以加入篩選條件WHERE,不過這里一定要注意的是,執行順序為:WHERE過濾→分組→聚合函數。牢記!
統計每個班上20歲以上的學生人數:
SELECT student_class,COUNT(student_name) AS 總人數 FROM t_student WHERE student_age >20 GROUP BY (student_class);
2、HAVING過濾條件:
之前說了分組操作、聚合函數、WHERE過濾的執行順序,那如果我們希望在聚合之后執行過濾條件怎么辦?
例,我們想查詢平均年齡在20歲以上的班級
能用下面的語句嗎?
SELECT student_class, AVG(student_age) FROM t_student WHERE AVG(student_age)>20 GROUP BY student_class;
結果會出錯。正因為聚合函數在WHERE之后執行,所以這里在WHERE判斷條件里加入聚合函數是做不到的。
這里使用HAIVING即可完成:
SELECT student_class,AVG(student_age) AS 平均年齡 FROM t_student GROUP BY (student_class) HAVING AVG(student_age)>20;
這里再啰嗦一句
SQL的執行順序:
–第一步:執行FROM
–第二步:WHERE條件過濾
–第三步:GROUP BY分組
–第四步:執行SELECT投影列,聚集函數
–第五步:HAVING條件過濾
–第六步:執行ORDER BY 排序