1. 程式人生 > >SQL學習(2)——MySQL資料庫常用的函式--聚合函式

SQL學習(2)——MySQL資料庫常用的函式--聚合函式

一、聚合函式
聚合函式對一組值執行計算並返回單一的值,
聚合函式與group by子句一塊使用方能顯現它的強大,
聚合函式與其他函式的根本區別:聚合函式一般作用在多條記錄上,
聚合函式中除了count()外,都忽略空值。

**聚合函式用表:
CREATE TABLE clh_t_stuff
(id INT PRIMARY KEY auto_increment,
NAME VARCHAR(20),
salary FLOAT,
age INT,
sex INT,
country VARCHAR(20),
area INT)
ENGINE=INNODB DEFAULT CHARSET=utf8;
插入資料
INSERT INTO clh_t_stuff(NAME

,salary,age,sex,country,area)
VALUE(“zhangsan”,”6500”,”26”,”1”,”上海”,”200”);
INSERT INTO clh_t_stuff(NAME,salary,age,sex,country,area)
VALUE(“lisi”,”5000”,”22”,”2”,”北京”,”330”);
INSERT INTO clh_t_stuff(NAME,salary,age,sex,country,area)
VALUE(“wangwu”,”3900”,”26”,”1”,”廣州”,”600”);
INSERT INTO clh_t_stuff(NAME
,salary,age,sex,country,area)
VALUE(“chengyi”,”6000”,”23”,”1”,”廣州”,”600”);
INSERT INTO clh_t_stuff(NAME,salary,age,sex,country,area)
VALUE(“zhaoer”,”5400”,”27”,”2”,”上海”,”200”);
INSERT INTO clh_t_stuff(NAME,salary,age,sex,country,area)
VALUE(“zhangsan”,”5000”,”22”,”2”,”北京”,”330”);
INSERT INTO clh_t_stuff(NAME
,salary,age,sex,country,area)
VALUE(“lisi”,”10000”,”27”,”1”,”北京”,”330”);
INSERT INTO clh_t_stuff(NAME,salary,age,sex,country,area)
VALUE(“lisi”,”8800”,”30”,”2”,”上海”,”200”);**

這裡寫圖片描述

<1>求和函式–sum()
用於對資料求和,返回選取的所有值的總和。

*– SUM(expr)
– 求在上海的所有員工的總工資
SELECT SUM(a.salary) AS salarysall
FROM clh_t_stuff a
WHERE a.country LIKE”%上海%”;*
這裡寫圖片描述

<2>求平均值
用於對一組資料求平均值。

– AVG(DISTINCT expr) 此處distinct
– 返回指定欄位去重之後的平均值,空值忽略。
– 計算所有員工的平均工資。
*SELECT AVG(DISTINCT a.salary) AS Avsalary
FROM clh_t_stuff a;*
【去重之後的平均值結果】:
這裡寫圖片描述

– AVG(expr)
– 返回指定欄位的平均值,空值忽略。
*SELECT AVG(a.salary) AS Avsalary
FROM clh_t_stuff a;*
【不去重的平均值結果】:
這裡寫圖片描述

注:DISTINCT()子句意為去重,在MYSQL語句中經常用到!

<3>count()計算滿足條件的數量

– count
– 返回指定組中的專案數量。
– 計算年齡大於23歲的員工數量,重名無效。
*SELECT COUNT(DISTINCT a.NAME) AS total
FROM clh_t_stuff a
WHERE a.age>23;*
這裡寫圖片描述

<4>max()返回指定資料的最大值

– MAX(expr)
– 返回指定資料中的最大值。
– 查詢同在上海工作的人中的最高工資。
*SELECT a.id,a.NAME,MAX(a.salary)
FROM clh_t_stuff a
WHERE a.country LIKE”%上海%”;*
這裡寫圖片描述

<5>min()返回指定資料的最小值

– MIN(expr)
– 返回指定組中的最小值。
– 查詢姓名同為lisi的員工的最低工資。
*SELECT a.id,a.NAME,MIN(a.salary)
FROM clh_t_stuff a
WHERE NAME LIKE”%lisi%”;*
這裡寫圖片描述

<6>經常與聚合函式一塊使用的子句–group by()
group by():通過欄位或者一定的規則將資料集劃分成幾個區域,以便於對資料集進行資料處理。

*– 按照年齡排序 各年齡的員工平均工資
SELECT AVG(a.salary),a.age
FROM clh_t_stuff a
GROUP BY a.age;*
這裡寫圖片描述

<7>經常與聚合函式一塊使用的子句–having()
having()子句若包含多個欄位,則可以用AND/OR/NOT連線。
having()子句中包含的欄位必須在select語句中出現
having()是分組(group by)後的篩選條件,作用於分組後的資料組內再篩選。(where()子句用於在分組前篩選)

*– 按照城市排序 查詢各城市員工的平均工資,只顯示平均工資大於5000的。
SELECT AVG(a.salary),COUNT(a.NAME) AS pnum
FROM clh_t_stuff a
GROUP BY a.country
HAVING AVG(a.salary) >5000;*
這裡寫圖片描述