MySQL必知必會--匯 總 數 據

彙集函數

咱們常常須要彙總數據而不用把它們實際檢索出來,爲此MySQL提
供了專門的函數。使用這些函數,MySQL查詢可用於檢索數據,以便分
析和報表生成。這種類型的檢索例子有如下幾種。函數

  • 肯定表中行數(或者知足某個條件或包含某個特定值的行數)。
  • 得到表中行組的和。
  • 找出表列(或全部行或某些特定的行)的最大值、最小值和平均
    值。
    上述例子都須要對錶中數據(而不是實際數據自己)彙總。所以,
    返回實際表數據是對時間和處理資源的一種浪費(更不用說帶寬了)。重
    復一遍,實際想要的是彙總信息。
    爲方便這種類型的檢索,MySQL給出了5個彙集函數,見表12-1。
    這些函數能進行上述羅列的檢索

彙集函數(aggregate function) 運行在行組上,計算和返回單
個值的函數。
設計

AVG()函數

AVG() 經過對錶中行數計數並計算特定列值之和,求得該列的平均
值。 AVG() 可用來返回全部列的平均值,也能夠用來返回特定列或行的平
均值。3d

AVG() 也能夠用來肯定特定列或行的平均值blog


這條 SELECT 語句與前一條的不一樣之處在於它包含了 WHERE 子
句。此 WHERE 子句僅過濾出 vend_id 爲 1003 的產品,所以
avg_price 中返回的值只是該供應商的產品的平均值排序

只用於單個列 AVG() 只能用來肯定特定數值列的平均值,而
且列名必須做爲函數參數給出。爲了得到多個列的平均值,
必須使用多個 AVG() 函數
NULL 值 AVG() 函數忽略列值爲 NULL 的行資源

COUNT()函數

COUNT() 函數進行計數。可利用 COUNT() 肯定表中行的數目或符合特
定條件的行的數目。
COUNT() 函數有兩種使用方式。產品

  • 使用 COUNT(*) 對錶中行的數目進行計數,無論表列中包含的是空
    值( NULL )仍是非空值。
  • 使用 COUNT(column) 對特定列中具備值的行進行計數,忽略
    NULL 值。

下面的例子返回 customers 表中客戶的總數it

下面的例子只對具備電子郵件地址的客戶計數
io

這條 SELECT 語句使用 COUNT(cust_email) 對 cust_email 列
中有值的行進行計數。在此例子中, cust_email 的計數爲 3 (表
示5個客戶中只有3個客戶有電子郵件地址)function

NULL 值 若是指定列名,則指定列的值爲空的行被 COUNT()
函數忽略,但若是 COUNT() 函數中用的是星號( * ),則不忽

MAX()函數

MAX() 返回指定列中的最大值。 MAX() 要求指定列名

對非數值數據使用 MAX() 雖然 MAX() 通常用來找出最大的
數值或日期值,但MySQL容許將它用來返回任意列中的最大
值,包括返回文本列中的最大值。在用於文本數據時,若是數
據按相應的列排序,則 MAX() 返回最後一行

NULL 值 MAX() 函數忽略列值爲 NULL 的行。

MIN()函數

MIN() 的功能正好與 MAX() 功能相反,它返回指定列的最小值。與
MAX() 同樣, MIN() 要求指定列名

對非數值數據使用 MIN() MIN() 函數與 MAX() 函數相似,
MySQL容許將它用來返回任意列中的最小值,包括返回文本
列中的最小值。在用於文本數據時,若是數據按相應的列排序,
則 MIN() 返回最前面的行

NULL 值 MIN() 函數忽略列值爲 NULL 的行

SUM()函數

SUM() 用來返回指定列值的和(總計)。
下面舉一個例子, orderitems表 包含訂單中實際的物品,每一個物品
有相應的數量( quantity )。可以下檢索所訂購物品的總數(全部
quantity 值之和):

函數 SUM(quantity) 返回訂單中全部物品數量之和, WHERE 子
句保證只統計某個物品訂單中的物品

SUM() 也能夠用來合計計算值。在下面的例子中,合計每項物品的
item_price*quantity ,得出總的訂單金額

函數 SUM(item_price*quantity) 返回訂單中全部物品價錢
之和, WHERE 子句一樣保證只統計某個物品訂單中的物品

在多個列上進行計算 如本例所示,利用標準的算術操做符,
全部彙集函數均可用來執行多個列上的計算
NULL 值 SUM() 函數忽略列值爲 NULL 的行。

彙集不一樣值

MySQL 5 及 後 期 版 本 下 面 將 要 介 紹 的 聚 集 函 數 的
DISTINCT 的使用,已經被添加到MySQL 5.0.3中。下面所述
內容在MySQL 4.x中不能正常運行

以上5個彙集函數均可以以下使用:

  • 對全部的行執行計算,指定 ALL 參數或不給參數(由於 ALL 是默認
    行爲);
  • 只包含不一樣的值,指定 DISTINCT 參數。

ALL 爲默認 ALL 參數不須要指定,由於它是默認行爲。若是
不指定 DISTINCT ,則假定爲 ALL

下面的例子使用 AVG() 函數返回特定供應商提供的產品的平均價格。
它與上面的 SELECT 語句相同,但使用了 DISTINCT 參數,所以平均值只
考慮各個不一樣的價格

注意 若是指定列名,則 DISTINCT 只能用於 COUNT() 。 DISTINCT
不能用於 COUNT(*),所以不容許使用COUNT(DISTINCT),
不然會產生錯誤 。相似地, DISTINCT 必須使用列名,不能用
於計算或表達式

將 DISTINCT 用於 MIN() 和 MAX() 雖然 DISTINCT 從技術上可
用於 MIN() 和 MAX() ,但這樣作實際上沒有價值。一個列中的
最小值和最大值不論是否包含不一樣值都是相同的

組合彙集函數

目前爲止的全部彙集函數例子都只涉及單個函數。但實際上 SELECT
語句可根據須要包含多個彙集函數。請看下面的例子:

取別名 在指定別名以包含某個彙集函數的結果時,不該該使
用表中實際的列名。雖然這樣作並不是不合法,但使用惟一的名
字會使你的SQL更易於理解和使用(以及未來容易排除故障)

彙集函數用來彙總數據。MySQL支持一系列彙集函數,能夠用多種
方法使用它們以返回所需的結果。這些函數是高效設計的,它們返回結
果通常比你在本身的客戶機應用程序中計算要快得多

相關文章
相關標籤/搜索