彙總數據 聚集函數 聚集函數(aggregate function) 運行在行組上,計算和返回單個值的函數。 | 函 數 | 說 明 | | : | : | | AVG() | 返回某列的平均值 | | COUNT() | 返回某列的行數 | | MAX() | 返回某列的最大值 | | MIN() ...
彙總數據
聚集函數
聚集函數(aggregate function) 運行在行組上,計算和返回單個值的函數。
函 數 | 說 明 |
---|---|
AVG() | 返回某列的平均值 |
COUNT() | 返回某列的行數 |
MAX() | 返回某列的最大值 |
MIN() | 返回某列的最小值 |
SUM() | 返回某列值之和 |
AVG()函數
AVG()通過對錶中行數計數並計算特定列值之和,求得該列的平均值:
SELECT AVG(prod_price) AS avg_price FROM products;
AVG()也可以用來確定特定列或行的平均值:
SELECT AVG(prod_price) AS avg_price FROM products WHERE vend_id = 1003;
註意:
- 只用於單個列:AVG()只能用來確定特定數值列的平均值,而且列名必須作為函數參數給出。為了獲得多個列的平均值,必須使用多個AVG()函數。
- NULL值:AVG()函數忽略列值為NULL的行。
COUNT()函數
COUNT()函數進行計數。可利用COUNT()確定表中行的數目或符合特定條件的行的數目。
COUNT()函數有兩種使用方式:
- 使用COUNT(*)對錶中行的數目進行計數,不管表列中包含的是空值(NULL)還是非空值。
- 使用COUNT(column)對特定列中具有值的行進行計數,忽略NULL值。
SELECT COUNT(*) AS num_cust FROM customers;
SELECT COUNT(cust_email) AS num_cust FROM customers;
MAX()函數
MAX()返回指定列中的最大值。MAX()要求指定列名:
SELECT MAX(prod_price) AS max_price FROM products;
註意:
- 對非數值數據使用MAX():雖然MAX()一般用來找出最大的數值或日期值,但MySQL允許將它用來返回任意列中的最大值,包括返迴文本列中的最大值。在用於文本數據時,如果數據按相應的列排序,則MAX()返回最後一行。
- NULL值:MAX()函數忽略列值為NULL的行。
MIN()函數
MIN()的功能正好與MAX()功能相反,它返回指定列的最小值。與MAX()一樣,MIN()要求指定列名:
SELECT MIN(prod_price) AS min_price FROM products;
註意:
- 對非數值數據使用MIN():MIN()函數與MAX()函數類似,MySQL允許將它用來返回任意列中的最小值,包括返迴文本列中的最小值。在用於文本數據時,如果數據按相應的列排序,則MIN()返回最前面的行。
- NULL值:MIN()函數忽略列值為NULL的行。
SUM()函數
SUM()用來返回指定列值的和(總計):
SELECT SUM(quantity) AS items_ordered FROM orderitems WHERE order_num = 20005;
SUM()也可以用來合計計算值:
SELECT SUM(item_price*quantity) AS items_ordered FROM orderitems WHERE order_num = 20005;
註意:
- 在多個列上進行計算:利用標準的算術操作符,所有聚集函數都可用來執行多個列上的計算。
- NULL值:SUM()函數忽略列值為NULL的行。
聚集不同值
以上5個聚集函數都可以如下使用:
- 對所有的行執行計算,指定ALL參數或不給參數(因為ALL是預設行為);
- 只包含不同的值,指定DISTINCT參數。
SELECT AVG(DISTINCT prod_price) AS avg_price FROM products WHERE vend_id = 1003;
註意: - 如果指定列名,則DISTINCT只能用於COUNT()。DISTINCT不能用於COUNT(*),因此不允許使用COUNT(DISTINCT),否則會產生錯誤。類似地,DISTINCT必須使用列名,不能用於計算或表達式。
- 將DISTINCT用於MIN()和MAX():雖然DISTINCT從技術上可用於MIN()和MAX(),但這樣做實際上沒有價值。一個列中的最小值和最大值不管是否包含不同值都是相同的。
組合聚集函數
目前為止的所有聚集函數例子都只涉及單個函數。但實際上SELECT語句可根據需要包含多個聚集函數:
SELECT COUNT(*) AS num_items, MIN(prod_price) AS price_min, MAX(prod_price) price_max, AVG(prod_pric) AS price_avg FROM products;
註意:
- 取別名:在指定別名以包含某個聚集函數的結果時,不應該使用表中實際的列名。雖然這樣做並非不合法,但使用唯一的名字會使你的SQL更易於理解和使用(以及將來容易排除故障)。