SQL 分組(group by和having)


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 排序


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM