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(*)對錶中 行的數目
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