1. 程式人生 > >資料分組與聚合函式

資料分組與聚合函式

到目前為止我們使用的聚合函式都是對普通結果集進行統計的,我們同樣可以使用聚合函式來對分組後的資料進行統計,也就是統計每一個分組的資料。我們甚至可以認為在沒有使用GROUP BY語句中使用聚合函式不過是在一個整個結果集是一個組的分組資料中進行資料統計分析罷了。

讓我們來看一下“檢視每個年齡段的員工的人數”如何用資料分組來實現,下面是實現此功能的SQL語句:


SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee GROUP BY FAge 

執行完畢我們就能在輸出結果中看到下面的執行結果:

GROUP BY子句將檢索結果按照年齡劃分為多個組,每個組是所有記錄的一個子集。上面的SQL例子在執行的時候資料庫系統將資料分成了下面的分組:

可以看到年齡相同的員工被分到了一組,接著使用“COUNT(*)”來統計每一組中的條數,這樣就得到了每個年齡段的員工的個數了。

可以使用多個分組來實現更精細的資料統計,比如下面的SQL語句就可以統計每個分公司的年齡段的人數:


SELECT FSubCompany,FAge,COUNT(*) AS CountOfThisSubCompAge FROM T_Employee GROUP BY FSubCompany,FAge 

執行完畢我們就能在輸出結果中看到下面的執行結果:

上面的執行結果是按照資料庫系統預設的年齡進行排序的,為了更容易的按照每個分公司進行檢視,我們可以指定按照FSubCompany欄位進行排序,帶ORDER BY的SQL語句如下:


SELECT FSubCompany,FAge,COUNT(*) AS CountOfThisSubCompAge FROM T_Employee GROUP BY FSubCompany,FAge ORDER BY FSubCompany 

執行完畢我們就能在輸出結果中看到下面的執行結果:

上面的SQL語句中,GROUP BY子句將檢索結果首先按照FSubCompany進行分組,然後在每一個分組內又按照FAge進行分組,資料庫系統將資料分成了下面的分組:

“COUNT(*)”對每一個分組統計總數,這樣就可以統計出每個公司每個年齡段的員工的人數了。

SUM、AVG、MIN、MAX也可以在分組中使用。比如下面的SQL可以統計每個公司中的工資的總值:


SELECT FSubCompany,SUM(FSalary) AS FSalarySUM FROM T_Employee GROUP BY FSubCompany 

執行完畢我們就能在輸出結果中看到下面的執行結果:

下面的SQL可以統計每個垂直部門中的工資的平均值:


SELECT FDepartment,SUM(FSalary) AS FSalarySUM FROM T_Employee GROUP BY FDepartment 

執行完畢我們就能在輸出結果中看到下面的執行結果:

下面的SQL可以統計每個垂直部門中員工年齡的最大值和最小值:


SELECT FDepartment,MIN(FAge) AS FAgeMIN,MAX(FAge) AS FAgeMAX FROM T_Employee GROUP BY FDepartment 

執行完畢我們就能在輸出結果中看到下面的執行結果: