6.1 聚合函數列表
當您在 SQL 中使用帶運算符的行分組時GROUP BY
,您可以SELECT
在語句中使用對分組數據進行操作的函數。此類函數也稱為聚合函數。
以下是最受歡迎的列表:
# | 功能 | 描述 |
---|---|---|
1個 | 數數() | 返回一組值的個數 |
2個 | 和() | 返回一組值的總和 |
3個 | 最大限度() | 返回組的最大值 |
4個 | 最小值() | 返回一組的最小值 |
5個 | 平均值() | 返回一組的平均值 |
6個 | 位與() | 對所有組值執行按位與 |
7 | 位或() | 對所有組值執行按位或 |
8個 | BIT_異或() | 對所有組值執行按位異或 |
9 | GROUP_CONCAT() | 將所有組值連接成一個字符串 |
現在讓我們看一些使用聚合函數的例子。
6.2 分析員工工資
讓我們從employee表中計算一些關於我們員工的統計數據。
問題一:我們有多少員工?
如果我們想找出表中所有記錄的數量,那麼我們可以為此使用聚合函數COUNT
。該請求將如下所示:
SELECT COUNT(*) FROM employee
MySQL 將返回數字 6 作為響應。我們部門有 6 名員工,包括一隻貓。好的。
問題二:我們每個月給所有員工發多少錢?
要回答這個問題,我們需要對所有員工的工資求和。為此,我們使用聚合函數SUM()
該請求將如下所示:
SELECT SUM(salary) FROM employee
注意,這次我們需要指定我們匯總的是哪一列的值。我們指定了salary列。我們不能只對錶中的所有字段求和。
而MySQL會返回數字461000作為答案。我們部門有6名員工,工資是461千。太多了。
最後,第三個問題:我們部門的最高和最低工資是多少?好吧,讓我們計算一下平均工資。為此,我們需要函數MIN
,MAX
和AVG
。
這次查詢會有點複雜,看起來像這樣:
SELECT MIN(salary), AVG(salary), MAX(salary)
FROM employee
此查詢的結果將是:
最低(工資) | AVG(工資) | MAX(工資) |
---|---|---|
1000 | 76833.3333 | 200000 |
我們部門的最低工資是 1,000 美元——非常好。頂薪20萬,這可是導演啊。
但是平均工資太高了,你需要以某種方式優化成本。讓我們再僱一隻貓吧:)