為了匯總數據而不把實際的檢索出來,MySQL 提供了專門的函數,聚集函數
好處:可以將檢索數據進行分析和報表生成
一、聚集函數(aggregate function): 運行在行組上,計算和返回單個值的函數。
可以用來:
1、確定表中的行數(或滿足某個條件 或 包含某個特定值的行數)
2、獲得表中行組的行
3、找出表列(或所有行貨某些特定的行)的最大值、最小值 和 平均值
都是對表中的數據進行匯總,而不是對實際數據本身,只是一個匯總信息,要返回實際的數據是對時間、處理資源的一種浪費。
MySQL 還支持一系列的標准偏差聚集函數
1、AVG() 函數 計算平均數
avg()通過 對表中行數計數 並計算 特定列值之和,求得該列的平均值。
既可以返回所有列的平均值也可以返回特定列或行的平均值
求出表中所有產品的平均價格
-- 求出商品價格的平均數 select avg(prod_price) as avgprice from products;
求出表中特定列或行的的平均值
與where 字句連用
-- 求出 供應商是 1003 產品的平均值 select avg(prod_price) as avgprice from products where vend_id=1003;
注意:
1、AVG() 只能用來確定特定數值列的平均值,而且列名必須作為函數參數給出
2、為了獲取多個列的平均值必須使用多個AVG 函數。
3、AVG() 函數忽略列值為NULL 的行。
2、COUNT() 函數 計算總行數
Count() 函數進行計數。 可以利用Count() 函數確定表中行的數目或符合特定條件的行的數目。
COUNT() 函數的兩種使用方式:
1、使用Count(*) 對表中的數目進行計數,不管表列中包含的是空值(NULL) 還是非空值。
2、使用count(column) 對特定列中具有值的行進行計數,忽略NULL 值
-- 計算products 表中有幾行 select count(*) as countprod from products;
計算特定行
-- 計算 郵件有幾行 select count(cust_email) from customers;
使用 count(*) 包括nul 值,使用 count(列名),不包括Null 值
3、MAX() 函數 : 返回指定列的最大值
-- 找出產品表中供應商編碼為 1003 的 價格最大的
select max(prod_price) as maxprice from products where vend_id = 1003;
注意:
1、max()函數 雖然一般用來找出最大的數值或日期值,但是MySQL 也允許將他用來返回任意列中的最大值
2、用於文本數據時,如果按照相應列的排序,max() 返回最后一行
3、Max() 函數忽略列值為NULL 的行
4、MIN() 函數 : 返回指定列的最小值
和max 類似,一個大一個小,,where 子句也是起作用的
注意:
1、min()函數 雖然一般用來找出最大的數值或日期值,但是MySQL 也允許將他用來返回任意列中的最小值
2、用於文本數據時,如果按照相應列的排序,min() 返回最前面的一行
3、MIN() 函數忽略列值為NULL 的行
5、SUM()函數 : 返回指定列值的和
-- 計算 供應商為 1003 的商品價格之和 select sum(prod_price) as sumprice from products where vend_id = 1003;
-- 計算訂單表所有商品的總價格 價格* 數量 的 和 select sum(quantity*item_price) as sumPriceQuantity from orderitems;
注意:
1、利用標准的算術操作符,所有的聚集函數都可用來指定多列上的計算
2、SUM() 函數忽略列值為NULL 的行
利用現在的聚集函數,和之前學的搭配使用可以產生很多種效果
二、聚集不同值 ALL 和 DISTINCT
ALL :對所有的行執行計算,,指定ALL 參數或不給參數(因為ALL 時默認的)
DISTINCT : 只包含不同的值,指定DISTINCT參數
all 參數不需要指定,因為時默認的行為,如果不指定disinct 則假定為all
有沒有想到,最開始學習 select 語句的時候,只把不同的檢索出來
注意:
1、 如果指定列名,則DISTINCT 只能用於COUNT() ,不能用於count(*),
2、不允許使用count(distinct) ,否則會產生錯誤
3、disinct 必須使用列名,不能用於計算或表達式
4、雖然distinct 可以用於MAX() 和 MIN() ,但是沒有意義,因為最大最小值就一個,就是他的本身
三、組合聚集函數
使用select 語句包含了多個聚集函數
夢幻聯動
-- 將訂單為20005,行數,價格總數,平均數,最大最小值求出 select sum(item_price)as sumPrice,count(item_price) as countPrice,avg(item_price) as avgPrice, max( item_price) as maxPrice,min( item_price) as minPrice from orderitems where order_num = 20005;
注意:
1、在指定列名包含某個聚集函數結果時,不要使用表示實際的列名
2、取得列名要具有唯一性,便於識別和出錯的時候排除故障