1. 程式人生 > >MySQL資料庫——彙總資料(聚集函式)

MySQL資料庫——彙總資料(聚集函式)

本節介紹什麼事SQL的聚集函式以及如何利用他們彙總表的資料。

在實際操作中,我們經常需要一些特點資料的,比如: 1.我們常常要確定表中的行數; 2. 獲得表中行組的和 ; 3.找出表列(或所有行或某些特定的行)的最大值、最小值和平均值。

上面那些例子都是都是需要對錶的資料,而不是實際表中的資料。 因此根據表中的實際資料專案返回來統計處理,是對資源和時間的一種浪費。而我們想要的其實是關於表本身的資訊的彙總 。

下面給出SQL的聚集函式

函 數 說 明
AVG() 返回某列的平均值
COUNT() 返回某列的行數
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列值之和

part 1 AVG()函式
AVG()通過對錶中行數計數並計算特定列值之和,求得該列的平均值。AVG()可用來返回所有列的平均值,也可以用來返回特定列或行的平均值。

SELECT AVG(users.user_age) AS avg_users FROM users

上面的語句將會返回users。user_age的平均值,為avg_users作為別名,來顯示返回。
tip:為了獲得多個列的平均值,必須使用多個AVG()

part 2 COUNT 函式
COUNT函式進行計數。可利用COUNT()確定表中行的數目或符合特定條件的行的數目。他有兩種使用方式: 1.使用COUNT(*)對錶中 行的數目

進行計數,不骨幹列表中包含的是空值還是非空值。 2.使用COUNT(column)對特定列中具有值的行進行計數u,忽略null值。

SELECT COUNT(*) AS NUM_USER FROM users

上面這種句子,就會返回users表中行數。

SELECT COUNT(user_password) AS NUM_USER FROM users

這條語句將會對具有user_password的行進行計數

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

SELECT MAX(users.user_age) AS USER_BEST FROM
users;

上面的語句將會返回users表中 年紀最大的值 。

part 4 MIN()函式
和MAX()的功能相反,返回指定列的最小值

SELECT MIN(users.user_age) AS USER_BEST FROM users;

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

SELECT SUM(users.user_age) AS USER_BEST FROM users;

上面的例子將會計算出 user.user_age這一列的和 。

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

SELECT SUM(item_price * quantity) AS total_price FROM orderitems WHERE order_num = 2005;

part 6 聚集不同的值
這是MySQL5.0.3新增的功能:以上的五個聚集函式,就惡意如下使用:
1.對所有的行執行計算,指定ALL引數或不給引數(因為預設就是ALL)
2.如果指向包含不同的值,就指定DISTINST引數 來限定 。
下面的例子使AVG()函式返回特定供應商提供的產品的平均價格。它與上面的語句相似,但是使用了DISTINCT引數 來限定

SELECT AVT(DISTINCT prod_price)AS avg_price FROM products WHERE vend_id = 1003;

part 7 組合使用聚合函式
實際上 SELECT函式可以包含多個 聚集函式 如下:

SELECT COUNT(*) AS num_item,
MIN(prod_price) AS price_min,
MAX(prod)price) AS price_max,
AVG(prod_price) AS price_avg
FROM prouducts