6.1 聚合函數列表

當您在 SQL 中使用帶運算符的行分組時GROUP BY,您可以SELECT在語句中使用對分組數據進行操作的函數。此類函數也稱為聚合函數。

以下是最受歡迎的列表:

# 功能 描述
1個 數數() 返回一組值的個數
2個 和() 返回一組值的總和
3個 最大限度() 返回組的最大值
4個 最小值() 返回一組的最小值
5個 平均值() 返回一組的平均值
6個 位與() 對所有組值執行按位與
7 位或() 對所有組值執行按位或
8個 BIT_異或() 對所有組值執行按位異或
9 GROUP_CONCAT() 將所有組值連接成一個字符串
這不是聚合函數的完整列表,但其餘的非常具體,我認為您在未來 5 年內不會使用它們。如果您仍然需要它們,您可以隨時閱讀 DBMS 的官方文檔。

現在讓我們看一些使用聚合函數的例子。

6.2 分析員工工資

讓我們從employee表中計算一些關於我們員工的統計數據。

問題一:我們有多少員工?

如果我們想找出表中所有記錄的數量,那麼我們可以為此使用聚合函數COUNT。該請求將如下所示:

SELECT COUNT(*) FROM employee

MySQL 將返回數字 6 作為響應。我們部門有 6 名員工,包括一隻貓。好的。

問題二:我們每個月給所有員工發多少錢?

要回答這個問題,我們需要對所有員工的工資求和。為此,我們使用聚合函數SUM()

該請求將如下所示:

SELECT SUM(salary) FROM employee

注意,這次我們需要指定我們匯總的是哪一列的值。我們指定了salary列。我們不能只對錶中的所有字段求和。

而MySQL會返回數字461000作為答案。我們部門有6名員工,工資是461千。太多了。

最後,第三個問題:我們部門的最高和最低工資是多少?好吧,讓我們計算一下平均工資。為此,我們需要函數MIN,MAXAVG

這次查詢會有點複雜,看起來像這樣:

SELECT MIN(salary), AVG(salary), MAX(salary)
FROM employee

此查詢的結果將是:

最低(工資) AVG(工資) MAX(工資)
1000 76833.3333 200000

我們部門的最低工資是 1,000 美元——非常好。頂薪20萬,這可是導演啊。

但是平均工資太高了,你需要以某種方式優化成本。讓我們再僱一隻貓吧:)