首頁 > 軟體

深入瞭解MySQL中聚合函數的使用

2022-07-27 14:03:13

今天的章節我們將要來學習一下 “聚合函數” ;首先我們需要學習聚合函數對資料進行統計分析,比如說求最大值、最小值、平均值之類的場景。但是單純的使用聚合函數,只能做全表範圍的統計分析。如果想要把記錄分組分別統計,需要使用 “GROUP BY” 和 “HAVING” 這樣的分組子句了。關於分組查詢的應用,將在下一章節為大家進行講解。當前章節我們還是學習一下 “聚合函數” 的基本使用。

什麼是聚合函數

聚合函數是用來做簡單的資料統計的,比如說統計一下 “員工表” 中的平均工齡是多少年啊,員工表中一共有多少條記錄等等… 這些都需要使用到聚合函數。

聚合函數也被稱為 “彙總函數” ,在資料的查詢分析中,應用的十分廣泛。可以幫助我們實現對資料的求和、求最大值、求最小值、求平均值等等。

如果不指定統計的範圍,那麼聚合函數統計的範圍就是整張資料表,該章節我們所講解的 “聚合函數” 就是針對整張資料表範圍的。

聚合函數演示案例:(求員工表中的平均月收入是多少?)

SELECT AVG(sal + IFNULL(comm,0)) AS 平均工資
from t_emp;

-- AVG:聚合函數,求平均值使用
-- IFNULL:IFNULL 函數的語法,當第一個引數的值為null 的時候,則返回第二個引數的值

PS:需要注意的地方,在聚合函數的返回結果集(無論是求和、最大值、最小值、還是求平均數),結果集只有一個返回資料。

SUM 函數

SUN 函數用於求和,只能用於數位型別;如果用於字元型別的資料,則統計結果為0;如果用於時間型別的資料的求和,則結果是毫秒數的相加。

SQL 語句演示 SUM函數 案例(統計 10、20 部門的員工的月薪的總和)

SELECT SUM(sal)
FROM t_emp
WHERE deptno IN (10, 20)

SQL 語句演示 SUM函數 案例(統計 ename(欄位) 的綜合 )

SELECT SUM(ename)
FROM t_emp
WHERE deptno IN (10, 20)

MAX 函數

MAX 函數用於獲取非空值的最大值。

SELECT MAX(comm) FROM t_emp;

-- 比如這種想要獲取 "comm" 欄位的非空的最大值,直接套一個 MAX() 函數即可。

SQL 語句演示 MAX函數 案例(查詢 10、20 部門的月收入最高的員工)

SELECT MAX(sal + IFNULL(comm,0)) AS max_sal
FROM t_emp
WHERE deptno IN (10, 20)

-- MAX:聚合函數,求最大值使用
-- IFNULL:IFNULL 函數的語法,當第一個引數的值為null 的時候,則返回第二個引數的值

SQL 語句演示 MAX函數 案例(查詢 員工姓名 最長的名字的長度)

SELECT MAX(LENGTH(ename)) AS length_ename
FROM t_emp;

-- LENGTH:LENGTH函數可以統計字元的個數計算其長度

MIN 函數

與MAX 函數對應的是 MIN 函數,用於獲得非空值的最小值。

SQL語句演示 MIN函數 案例(查詢 員工編號最小 的員工)

SELECT MIN(empno) AS min_empno
FROM t_emp;

SQL語句演示 MIN函數 案例(查詢 最早入職 的員工)

SELECT MIN(hiredate) AS min_hiredate
FROM t_emp;

AVG 函數

在上文我們已經演示過了 AVG 函數的使用方法,AVG 函數是用於獲得非空值的平均值;如果用於非數位資料的統計,輸出結果為 0 。
聚合函數演示案例:(求員工表中的平均月收入是多少?)

SELECT AVG(sal + IFNULL(comm,0)) AS 平均工資
from t_emp;

-- AVG:聚合函數,求平均值使用
-- IFNULL:IFNULL 函數的語法,當第一個引數的值為null 的時候,則返回第二個引數的值

COUNT 函數

COUNT 函數用於獲得記錄的數量,COUNT 函數有兩種用法。

第一種:在 COUNT() 函數的 括號內,輸入一個 “*” 即可,記錄下包含空值的查詢記錄的數量。範例:COUNT(*)

第二種:在 COUNT() 函數的 括號內,輸入要統計的列名即可,記錄下包含非空值的查詢的記錄的數量。範例:COUNT(列名)

SQL語句演示 COUNT(*) 案例

SELECT COUNT(*) FROM t_emp;

SQL語句演示 COUNT(列名) 案例

SELECT COUNT(comm) FROM t_emp;

聚合函數綜合小練習

聚合函數綜合練習 -1

SQL 案例1 - 語句演示:(查詢 10、20部門中,底薪超過 2000 並且工齡超過 15年 的員工人數)

SELECT COUNT(*) 
FROM t_emp
WHERE deptno IN (10, 20)
AND sal >= 2000
AND DATEDIFF(NOW(),hiredate)/365 >= 15;

聚合函數綜合練習 -2

SQL 案例2 - 語句演示:(查詢 1985年之後入職的員工,並且底薪超過公司平均底薪的員工的數量)

SELECT COUNT(*) 
FROM t_emp
WHERE hiredate >= "1985-01-01"
AND sal >= AVG(sal)

PS:表面上看這個 SQL 是正常的,但是這個 SQL 語是無法得出想要的結果的,因為語法上有錯誤。WHERE 子句中出現了聚合函數,這一點大家一定要注意,聚合函數 一定不能出現在 WHERE 子句中。

PS:WHERE 子句中不能出現 聚合函數 的根本原因還要從 子句的執行順序來說起。sql語句的執行過程是:from-->where-->group by -->having --- >order by --> select;

PS:聚合函數是針對結果集進行的,但是where條件並不是在查詢出結果集之後執行,所以主函數放在where語句中,會出現錯誤。

PS:關於如何解決這個問題,將在下一章節的 "分組查詢的應用" 進行詳細的講解。

以上就是深入瞭解MySQL中聚合函數的使用的詳細內容,更多關於MySQL聚合函數的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com