匯總資料
聚集函式
聚集函式(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更易于理解和使用(以及將來容易排除故障),
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/542246.html
標籤:其他
