-- 聚集函式(方便分析和報表生成,其實也就是進行簡單的統計學的處理,不需要返回原表來浪費時間)
/*
比如:
1.確定表中某些行數(或者滿足某個條件或包含某個特定值的行數)
2.獲得表中某些行的和
3.找出表列(或所有行或某些特定的行)的最大值、最小值、平均值
(在各種主要SQL實現中得到了相當一致的支援)
特點:對某些行執行的函式,計算並返回一個值
SQL聚集函式:
AVG() 返回某列的平均值
COUNT() 返回某列的行數
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列值之和
*/
-- AVG()函式
/* 計算平均值,可以返回所有列的平均值,也可以返回特定列或行的平均值*/
SELECT AVG(prod_price) AS avg_price
FROM Products;
#返回Products表中所有產品的平均價格
#返回特定供應商所提供產品的平均價格
SELECT AVG(prod_price) AS avg_price
FROM Products
WHERE vend_id = 'DLL01';
#AVG()只能用於單個列,列名是函式的引數,對於多個列則要用多個AVG()
#AVG()函式忽略列值為NULL的行
-- COUNT()函式
/*COUNT()確定表中行的數目或符合特定條件的行的數目
有兩種使用方式:
1.使用COUNT(*)對錶中行的數目進行計數,不管表列中包含的是空值(NULL)還是非空值
2.COUNT(column)對特定列中具有的值的行進行計數,忽略NULL值*/
SELECT COUNT(*) AS num_cust
FROM Customers;#返回Customers表中顧客的總數
-- 只對具有電子郵件地址的客戶計數
SELECT COUNT(cust_email) AS num_cust
FROM Customers;
# 注意COUNT()指定列名,則忽略為空的行,使用星號*,則不忽略。
-- MAX()返回指定列中的最大值(要求指定列名)
SELECT MAX(prod_price) AS max_price
FROM Products;
/* MAX()一般用來找出最大的數值或日期值,但是也可以用來返回任意列中的最大值,在文字列中返回該列排序後的最後一行
MAX()函式忽略列值為NULL的行*/
-- MIN()函式(返回指定列的最小值)(要求指定列)
SELECT MIN(prod_price) AS min_price
FROM Products;
/* MIN()一般用來找出最小的數值或日期值,但是也可以用來返回任意列中的最小值,在文字列中返回該列排序後的最前面的行
MIN()函式忽略列值為NULL的行*/
-- SUM()函式 (用來返回指定列值的和)
SELECT SUM(quantity) AS items_ordered
FROM OrderItems
WHERE order_num = 20005;
-- SUM()也可以用來合計計算值,得到總的訂單金額
SELECT SUM(item_price*quantity) AS total_price
FROM OrderItems
WHERE order_num = 20005;
#SUM()函式忽略列值為NULL的行
-- 聚集不同值
/* AVG() COUNT() MAX() MIN() SUM()都可以如下使用
1.對所有行執行計算(預設ALL引數)
2.只包含不同的值,指定DISTINCT引數,去重 */
SELECT AVG(DISTINCT prod_price) AS avg_price
FROM Products
WHERE vend_id = 'DLL01';
/* 再次強調DISTINCT後面必須使用列名,不能用於COUNT(*)
DISTINCT用於MIN()和MAX()沒有意義 */
-- 組合聚集函式
#SELECT語句可根據需要包含多個聚集函式
SELECT COUNT(*) AS num_items,
MIN(prod_price) AS price_min,
MAX(prod_price) AS price_max,
AVG(prod_price) AS price_avg
FROM Products;
#取別名時不要使用表中實際的列名,可能會產生模糊的錯誤資訊