SQL的聚合函式及分組查詢
阿新 • • 發佈:2021-08-16
SQL的聚合函式及分組查詢
要在這個世界上獲得成功,就必須堅持到底:至死都不能放手。
count
select count(*) from students #底層優化了
select count(1) from students #效果和*一樣
select count(age) from emp #慢,只統計非NULL的
max / min
select max(score) max from scores #求該欄位的最大值 select min(score) min from scores #獲取該欄位的最小值 select class,max(score) from scores group by class #配合分組使用
sum / avg
select sum(score) from scores #求和
select avg(score) from scores #求平均數
分組 group by
- 用於對查詢的結果進行分組統計
- group by表示分組,
- having 子句類似where過濾返回的結果
select class,max(score) from scores group by class #聚合函式配合分組使用
這裡的意思是從scores表中,查詢班級class和最高成績,按班級分組。
報錯句分析:
Invalid use of group function
#select class,max(score) FROM scores where max(score) > 80 GROUP BY class;
先過濾再分組是高效的,但where中不能使用聚合函式,所以這裡我們應該使用having子句。
select class,max(score) FROM scores GROUP BY class having max(score) > 80;
注意:這裡是先查詢分組完後,再執行having子句的過濾條件。
總結:
-
where 子句的作用是對查詢結果進行分組前,將不符合where條件的資料去掉,即在分組之前過濾資料,where條件中不能使用聚合函式過濾出特定的資料。
-
having 子句的作用是篩選滿足條件的組,即在分組之後過濾資料,條件中經常包含聚合函式,使用having 條件過濾出特定的組,也可以使用多個分組標準進行分組,但要注意