聚集函數
聚集函數(aggregate function)對某些行運行的函數,計算并返回一個值。
1 AVG()函數
SELECT AVG(prod_price) AS avg_price
FROM Products;
警告:只用于單個列
AVG()只能用來確定特定數值列的平均值,而且列名必須作為函數參數給出。為了獲得多個列的平均值,必須使用多個AVG()函數。
說明:NULL值
AVG()函數忽略列值為NULL的行。
2 COUNT()函數
COUNT()函數進行計數。可利用COUNT()確定表中行的數目或符合特定條件的行的數目。
- 使用COUNT(*)對表中行的數目進行計數,不管表列中包含的是空值(NULL)還是非空值。
- 使用COUNT(column)對特定列中具有值的行進行計數,忽略NULL值。
說明:NULL值
如果指定列名,則COUNT()函數會忽略指定列的值為空的行,但如果COUNT()函數中用的是星號(*),則不忽略。
3 MAX()函數?MIN()
5 SUM()函數
SELECT SUM(item_price*quantity)AS total_price
FROM OrderItems
WHERE order_num=20005;
說明:NULL值
SUM()函數忽略列值為NULL的行。
聚集不同值
- 對所有行執行計算,指定ALL參數或不指定參數(因為ALL是默認行為)。
- 只包含不同的值,指定DISTINCT參數。
提示:ALL為默認
ALL參數不需要指定,因為它是默認行為。如果不指定DISTINCT,則假定為ALL。
在使用了DISTINCT后,此例子中的avg_price比較高,因為有多個物品具有相同的較低價格。排除它們提升了平均價格。
SELECT AVG(DISTINCT prod_price)AS avg_price
FROMProducts
WHERE vend_id='DLL01';
警告:DISTINCT不能用于COUNT(*)
如果指定列名,則DISTINCT只能用于COUNT()。DISTINCT不能用于COUNT(*)。類似地,DISTINCT必須使用列名,不能用于計算或表達式。
組合聚集函數
SELECT COUNT(*)AS num_items,
? ? ? ? ? ? ?MIN(prod_price)AS price_min,
? ? ? ? ? ? ?MAX(prod_price)AS price_max,
? ? ? ? ? ? ?AVG(prod_price)AS price_avg
FROMProducts;