1. 程式人生 > 其它 >SQL的聚合函式及分組查詢

SQL的聚合函式及分組查詢

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 條件過濾出特定的組,也可以使用多個分組標準進行分組,但要注意

    ,having中使用的過濾條件必須是查到的結果。